22

同じ形式で異なる一意の文字列があります。文字列は次のよう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;
}
4

5 に答える 5

2

You can try with code:

import java.math.BigInteger;

public static BigInteger stringToBigInteger(String text) {
    BigInteger bigInt = new BigInteger(text.getBytes());
    return bigInt;
}

thanks.

于 2015-03-15T04:03:33.630 に答える
0

文字列を整数の基数表現として扱います0x110000(文字の範囲が限られていることがわかっている場合は、基数を小さくしてもかまいません)。に変換しBigIntegerます。

于 2013-07-11T03:42:09.623 に答える