同じ形式で異なる一意の文字列があります。文字列は次のようaxf25!j&809>-11~dc
になり、この文字列から一意の整数値を取得したいと考えています。この値は毎回同じである必要があり、文字列によって異なります。文字列の各文字をintに変換してから、文字を互いに合計しようとしました。しかし、同じ記号のセットを持つ 2 つの文字列がある場合、互いに等しい整数値を返します。だから似合わない。一意の文字列から一意の整数値を生成するにはどうすればよいですか?
アップデート:
与えられたすべての解決策を検討した後、一意の整数値を生成する関数を作成することにしました。衝突が排除されることを願っています。
public int getUniqueInteger(String name){
String plaintext = name;
int hash = name.hashCode();
MessageDigest m;
try {
m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(10);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
hashtext = "0"+hashtext;
}
int temp = 0;
for(int i =0; i<hashtext.length();i++){
char c = hashtext.charAt(i);
temp+=(int)c;
}
return hash+temp;
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return hash;
}