Unique ID of a string (numeric hash)

Sometimes you need to convert a string into a unique number — for example, to use it as an ID in a database. The functions below generate a numeric hash from a string.

This can be useful when you want a compact identifier made of digits only.

Option 1

/**
 * Return a numeric hash of a specified string.
 *
 * @see https://stackoverflow.com/a/23679870/175071
 * @author Kama (wp-kama.com)
 * @version 1.1
 *
 * @param string $string String to be hashed.
 * @param int    $len    Number length to be returned.
 *        Max is 18 (for 64 bit system) 22 (for 32 bit).
 *        13 is quite enough to be unique (tested on 1 000 000 vals).
 *
 * @return int
 */
function num_hash( $string, $len = 13 ): int {
	$hash = implode( '', unpack( 'N2', md5( $string, true ) ) );

	return (int) substr( $hash, 0, $len );
}

Example:

var_dump( num_hash( 'a' ) );                     // int(2140051773237)
var_dump( num_hash( 'asd' ) );                   // int(2014669166342)
var_dump( num_hash( str_repeat( 'asd', 10 ) ) ); // int(3686969916323)

Min length Unique Testing code:

$hashes  = [];
$strings = [];
for( $i = 1; $i < 1000000; $i++ ){
	$str = 'some string'. $i;
	$strings[] = $str;
	$hashes[] = Vehicles_REST_Controller::num_hash( $str, 13 );
}

print_r( [
	'Generated Hash example' => $hashes[0],
	'Strings all'  => count( $strings ),
	'Strings uniq' => count( array_unique( $strings ) ),
	'Hash uniq'    => count( array_unique( $hashes ) ),
] );

Option 2

/**
 * Fast 64-bit unsigned numeric hash (PHP ≥ 8.1).
 */
function num_hash( string $str, int $len = 13 ): int {
	$h = unpack( 'J', hash( 'xxh3', $str, true ) )[1] & 0x7fffffffffffffff;

	return (int) substr( (string) $h, 0, $len );
}

Example:

var_dump( num_hash( 'a' ) );                     // int(7405662395035)
var_dump( num_hash( 'asd' ) );                   // int(3120540762862)
var_dump( num_hash( str_repeat( 'asd', 10 ) ) ); // int(6755367067389)

Conclusion

These functions provide a simple and efficient way to generate a unique numeric ID from any string. This is especially useful when working with database IDs, file naming, indexing, or any case where you need a number instead of a string. Whether you're looking to generate a numeric string hash, convert a string to number in PHP, or create a PHP string-to-int hash, these methods offer reliable solutions. They're perfect for anyone needing a unique numeric ID from a string, or trying to generate a PHP hash with digits only. If you're searching for how to turn a string into a numeric ID, generate a number from a string, or create a PHP int from a string — this approach has you covered.