从字符串中获取唯一的整数值

2022-09-02 01:00:50

我有相同格式的不同唯一字符串。字符串看起来像这样,我想从这个字符串中获取唯一的整数值。每次此值必须相同,并且取决于字符串。我尝试将字符串的每个字符转换为int,然后对字符求和。但是,如果我有2个字符串具有相同的符号集,则它返回彼此相等的整数值。所以它不适合我。如何从唯一字符串生成唯一整数值?axf25!j&809>-11~dc

更新:

在考虑了所有给定的解决方案之后,我决定创建生成唯一整数值的函数。我希望它排除碰撞。

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;
}

答案 1

你可以只使用(例如)来给你一定程度的唯一性,但你必须确保你可以处理碰撞。String.hashCode()mystring.hashCode()


答案 2

不能从足够长的字符串生成完全唯一的 s,因为 10 个字符的字符串比 32 位整数多int

就非唯一解决方案而言,您可以使用标准函数,它在Java中的实现相当不错。对于更复杂的东西,你可以考虑计算加密哈希(SHA-2MD5等)。hashCode