В общем я искал альтернативу вот такому коду:
function string_to_short_md5( $string ) {
$result = '';
$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$raw = md5( $string, true );
$length = strlen( $this->dec_to_base( $alphabet, 2147483647 ) );
foreach ( str_split( $raw, 4 ) as $dword ) {
$dword = ord( $dword[0] ) + ord( $dword[1] ) * 256 + ord( $dword[2] ) * 65536 + ord( $dword[3] ) * 16777216;
$result .= str_pad( $this->dec_to_base( $alphabet, $dword ), $length, $alphabet[0], STR_PAD_LEFT );
}
return $result;
}
function dec_to_base( $alphabet, $dword ) {
$rem = (int) fmod( $dword, strlen( $alphabet ) );
if ( $dword < strlen( $alphabet ) ) {
return $alphabet[ $rem ];
}
return $this->dec_to_base( $alphabet, ( $dword - $rem ) / strlen( $alphabet ) ) . $alphabet[ $rem ];
}
Который возвращает md5 строки в base52 (24 символа a-zA-Z).
В результате нашёл более короткое решение:
strtr( base_convert( md5( $string ), 16, 36 ), '0123456789', 'ABCDEFGHIJ' );
Которое возвращает md5 строки в base36 (24-25 символов a-zA-Z).
Всем спасибо за помощь!