Уникальный ID для строки (числовой хеш строки)
В этой статье мы рассмотрим, как получить уникальный числовой хеш для строки. Этот хеш может использоваться в качестве идентификатора в базе данных. Ниже представлена функция, которая поможет вам создать такой числовой хеш.
Зачем нужен числовой хеш?
Числовые хеши позволяют создать уникальный идентификатор для строк, что полезно, когда необходимо работать с большими объемами данных, обеспечивая однозначность идентификаторов.
Как работает код?
Пример кода
Вот пример кода, который демонстрирует, как получить уникальный числовой хеш:
/**
- Возвращает числовой хеш для указанной строки.
- @param string $string Строка, которую нужно преобразовать в хеш.
- @param int $len Максимальная длина возвращаемого числа. Максимум — 22. Длиной 13 достаточно для уникального числа.
- (было протестировано на 1 000 000 строк).
- Примечание: Максимальная длина для 64-битной системы — 18 цифр.
- @return number
- @version 1.0
-
@author Kama (wp-kama.com)
*/
function num_hash( $string, $len = 13 ){$numhash = unpack( 'N2', md5( $string, true ) );
$hash = $numhash[1] . $numhash[2];
if( $len )
$hash = substr( $hash, 0, $len );return (int) $hash;
}
Объяснение кода
-
Функция
md5
— используется для получения хеша строки. Она возвращает строку фиксированной длины, которая затем преобразуется в числовой формат. -
Функция
unpack
— разбивает строку на части, которые можно интерпретировать как числа. В нашем случае, мы берем два 32-битных числа. -
Объединение — эти два числа соединяются вместе, чтобы получить более длинный хеш.
-
Обрезка — если указана длина, хеш обрезается до нужного количества символов.
-
Возврат результата — в конце функция возвращает числовой хеш в виде целого числа.
Проверка уникальности
Чтобы убедиться, что создаваемый хеш уникален, можно протестировать функцию с большим количеством строк. Вот пример, как это сделать:
$hashes = $strings = [];
for( $i = 1; $i < 1000000; $i++ ){
$str = 'some string'. $i;
$strings[] = $str;
$hashes[] = num_hash( $str, 13 );
}
print_r( [
'Пример сгенерированного хеша' => $hashes[0],
'Всего строк' => count( $strings ),
'Уникальных строк' => count( array_unique( $strings ) ),
'Уникальных хешей' => count( array_unique( $hashes ) ),
] );
В этом примере мы:
- Генерируем строки с номером от 1 до 999999.
- Сохраняем их в массивы.
- Проверяем, сколько строк и хешей уникальны.
Заключение
Теперь вы знаете, как создать уникальный числовой хеш для строк в PHP. Это полезный инструмент для работы с базами данных и идентификаторами. Если у вас возникнут вопросы, не стесняйтесь их задавать!