繁体   English   中英

从字符串生成10位数字

[英]Generate 10 digit number from a string

嗨,我有如下字符串

$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) . " ";
}

PS

  1. 对于小于10个字符的较小字符串,还应生成10个随机数
  2. 我有大量的字符串数据库,因此数字不应该依赖于第一个或最后一个10个字符。它应该是所有单词的混合,并且应尽可能唯一。

谢谢大家

这是不可能的,因为英文字母由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位数字,这有什么问题。

在字符串的md5上创建一个substr函数:

substr(hexdec(md5($string)), 0, 10)

这会做

$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM