現在終於知道為何不要使用複合主鍵了 。
這是為了將資料結構層與業務邏輯層切割 ,
令業務邏輯的異動影響底層資料結構的程度降到最低 。
除非是legacy(遺留系統)的情況 。
由於沒有多餘心力再去變更它,所以只能順著原設計來應用。
2008年11月7日 星期五
2008年10月20日 星期一
2008年10月9日 星期四
[備忘記]Java 如何製作亂數產生的密碼
public String makePassword(int passwordLength){
//密碼的字符表(可以亂排,至於要不要有特殊字元就看後續的處理可否允許特殊字元的輸入)
char[] word =
{'a','b','c','d','e','f',
'g','h','i','j','k','L',
'm','0','n','o','1','2',
'3','p','4','q','5','r',
's','6','t','7','u','v',
'8','w','x','9','y','z'};
byte[] randomNumber = new byte[passwordLength];
new Random().nextBytes(randomNumber);
StringBuilder password = new StringBuilder();
for(int i = 0; i < randomNumber.length; i++){
password.append(word[Math.abs(randomNumber[i]) % word.length]);
}
return password.toString();
}
//密碼的字符表(可以亂排,至於要不要有特殊字元就看後續的處理可否允許特殊字元的輸入)
char[] word =
{'a','b','c','d','e','f',
'g','h','i','j','k','L',
'm','0','n','o','1','2',
'3','p','4','q','5','r',
's','6','t','7','u','v',
'8','w','x','9','y','z'};
byte[] randomNumber = new byte[passwordLength];
new Random().nextBytes(randomNumber);
StringBuilder password = new StringBuilder();
for(int i = 0; i < randomNumber.length; i++){
password.append(word[Math.abs(randomNumber[i]) % word.length]);
}
return password.toString();
}
2008年9月24日 星期三
[備忘記]如何做密碼編碼?
方法1(使用 seam api):
import org.jboss.seam.security.digest.DigestUtils;
public String hash(String password){
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法2(使用 Apache Jakarta 專案的 Commons codec):
import org.apache.commons.codec.digest.DigestUtils;
public String hash(String password){
//1.3版的只有提供 MD5、SHA 的編碼,如果想要完整的 SHA 編碼,請下載 1.4-snapshot
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法3(使用 java api + seam api):
import java.security.MessageDigest;
import org.jboss.seam.util.Hex;
public String hash(String password){
try{
//MessageDigest 可傳入的演算法參數有 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512
MessageDigest md = MessageDigest.getInstance("MD5");
//字串轉 byte 可指定不同的 charsetName,但其中的差異要傳入的 password 非單純的英數字組合才看的出來
md.update(password.getBytes("Big5"));
return new String(Hex.encodeHex(md.digest()));
}catch(Exception e){
throw new RuntimeException(e.getMessage());
}
}
import org.jboss.seam.security.digest.DigestUtils;
public String hash(String password){
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法2(使用 Apache Jakarta 專案的 Commons codec):
import org.apache.commons.codec.digest.DigestUtils;
public String hash(String password){
//1.3版的只有提供 MD5、SHA 的編碼,如果想要完整的 SHA 編碼,請下載 1.4-snapshot
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法3(使用 java api + seam api):
import java.security.MessageDigest;
import org.jboss.seam.util.Hex;
public String hash(String password){
try{
//MessageDigest 可傳入的演算法參數有 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512
MessageDigest md = MessageDigest.getInstance("MD5");
//字串轉 byte 可指定不同的 charsetName,但其中的差異要傳入的 password 非單純的英數字組合才看的出來
md.update(password.getBytes("Big5"));
return new String(Hex.encodeHex(md.digest()));
}catch(Exception e){
throw new RuntimeException(e.getMessage());
}
}
2008年9月23日 星期二
[備忘記]Java內如何做四捨五入?
double number = 123.456123;
new BigDecimal(number, new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
結果:120.0
new BigDecimal(number, new MathContext(5, RoundingMode.HALF_UP)).doubleValue();
結果:123.46
這是因為粗體字的設定代表返回數字的精度位數,由準確返回值的最左端數字開始計算。
所以要動態的取得整數位數要另外設計:
public int getIntegerLength(double number){
String[] s = new Double(number).toString().split("\\.");
return s[0].equals("0") ? 0 : s[0].length();
}
new BigDecimal(number, new MathContext(getIntegerLength(number) + 2, RoundingMode.HALF_UP)).doubleValue();
如此粗體字部分就可以自行設定要取得小數點後幾位的四捨五入了。
new BigDecimal(number, new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
結果:120.0
new BigDecimal(number, new MathContext(5, RoundingMode.HALF_UP)).doubleValue();
結果:123.46
這是因為粗體字的設定代表返回數字的精度位數,由準確返回值的最左端數字開始計算。
所以要動態的取得整數位數要另外設計:
public int getIntegerLength(double number){
String[] s = new Double(number).toString().split("\\.");
return s[0].equals("0") ? 0 : s[0].length();
}
new BigDecimal(number, new MathContext(getIntegerLength(number) + 2, RoundingMode.HALF_UP)).doubleValue();
如此粗體字部分就可以自行設定要取得小數點後幾位的四捨五入了。
訂閱:
文章 (Atom)