Вот простой алгоритм хеширования, который я написал. Вы можете использовать это ... вы можете легко изменить отображение ввода и вывода, а также длину хеша, чтобы компенсировать читабельность и вероятность столкновения.
Этот алгоритм не предназначен для того, чтобы быть безопасным или настолько эффективным, но должен справиться с задачей.
public class HashTools {
final static String inputMapping = "0123456789ABCDEF";
final static String[] outputMapping = new String[] {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
};
/* Input: String - containing mostly letters / numbers
* Output: <hashLength> String using 0-9,A-Z encoding
*/
public static String simpleHash(String str, int hashLength) {
StringBuilder hashStr = new StringBuilder(hashLength);
String strUpper = str.toUpperCase();
int[] hash = new int[hashLength];
int i, j, num;
for (i = 0; i < strUpper.length(); i++) {
char strChar = strUpper.charAt(i);
num = mapCharToInt(strChar);
j = i % hashLength;
hash[j] += num;
}
for (i = 0; i < hashLength; i++) {
hashStr.append(mapIntToHashChar(hash[i]));
}
return hashStr.toString();
}
private static int mapCharToInt(char hexChar) {
return inputMapping.indexOf(hexChar);
}
private static String mapIntToHashChar(int num) {
return outputMapping[num % outputMapping.length];
}
}