Применение принципа KISS :
- SHA - это просто строка
- Хеш-код JDK для
String
является "достаточно случайным" Integer
может отображаться в любой базе
Эта единственная строка кода делает это:
public static String shortHash(String sha) {
return Integer.toString(sha.hashCode() & 0x7FFFFFFF, 36).substring(0, 3);
}
Примечание: & 0x7FFFFFFF
- обнулить знаковый бит (хеш-коды могут быть отрицательными числами, которые в противном случае отображались бы с ведущим знаком минус)хэш int
меньше 100
(основание 36) - это означает, что он напечатает менее 3 символов.Этот код исправляет это, сохраняя значение «random».Он также избегает вызова substring()
, поэтому производительность должна быть лучше.
static int min = Integer.parseInt("100", 36);
static int range = Integer.parseInt("zzz", 36) - min;
public static String shortHash(String sha) {
return Integer.toString(min + (sha.hashCode() & 0x7FFFFFFF) % range, 36);
}
Этот код гарантирует, что конечный хэш имеет 3 символа, заставляя его быть между 100
и zzz
- самым низким исамый высокий хэш из 3-х символов в базе 36, но все еще делающий его «случайным».