你好我有下面的字符串
$string = "hello this is big test string"
或
$string = "hello small";
我需要从上面的字符串中生成唯一的10个数字。它不必是可逆的,但应始终生成相同的唯一10个数字。
我尝试了什么:
function toNumber($dest)
{
if ($dest)
return ord(strtolower($dest)) - 96;
else
return 0;
}
$str = "hello this is string";
$chars = str_split($str);
foreach($chars as $char){
echo toNumber($char) . " ";
}
P.S
谢谢大家。
答案 0 :(得分:1)
这是不可能的,因为英文字母由26个字母组成,数字只有10个“字母” 加上你的字符串也可能长于10个字符 因此,对于长度介于1和n之间的字符串,无法为10位数创建唯一编号。
例如,假设您的字符串长度为10个字符,就像示例中的字符串一样:$string = "hello small";
然后你采取一种简单的翻译方法:
a = 0, b = 1, c = 2, d = 3, e = 4, f = 5, g = 6, h = 7, i = 8, j = 9,
k = 0, l = 1, m = 2, n = 3, o = 4, p = 5, q = 6, r = 7, s = 8, t = 9,
u = 0, v = 1, w = 2, x = 3, y = 4, z = 5, [space] = 6
然后字符串翻译将是:
74114682011
如果你有另一个字符串,可能是某个名字......
$string = "robby imull";
..它会转换成完全相同的数字代码。
(我知道这是一个奇怪的名字,但我只是做了一些快速的例子)
我希望你能解决将代码限制为10位数的问题。
答案 1 :(得分:0)
在你的字符串的md5上创建一个substr函数:
substr(hexdec(md5($string)), 0, 10)
答案 2 :(得分:0)
这样做
$input = "hello worlds";
$encrypted = encryptIt( $input );
function encryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
echo substr($encrypted, -20, 10);