什么是创建字符串哈希的最佳方法,如果哈希不能超过4个字符,并且这4个字符只能是小写字母或数字?
我想要哈希的字符串有1-255个字符。我知道可能不可能创建一个没有冲突的4个字符哈希。但是,如果我有一个好的哈希,其中可能的冲突被最小化,那就足够了。
我尝试的是来自此处的CRC16CCITT:http://introcs.cs.princeton.edu/java/61data/CRC16CCITT.java
但这样会导致过多的碰撞。是否有更好的算法?
我想要哈希的字符串有1-255个字符。我知道可能不可能创建一个没有冲突的4个字符哈希。但是,如果我有一个好的哈希,其中可能的冲突被最小化,那就足够了。
我尝试的是来自此处的CRC16CCITT:http://introcs.cs.princeton.edu/java/61data/CRC16CCITT.java
public class CRC16CCITT {
public static void main(String[] args) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
// byte[] testBytes = "123456789".getBytes("ASCII");
byte[] bytes = args[0].getBytes();
for (byte b : bytes) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
}
crc &= 0xffff;
StdOut.println("CRC16-CCITT = " + Integer.toHexString(crc));
}
}
但这样会导致过多的碰撞。是否有更好的算法?
String.hashCode()
?),使用来自.toString(hash, 36)
的四个字符。) - greybeard