Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取给定字符串的唯一8位数字_Php_Algorithm_Unique Key - Fatal编程技术网

Php 获取给定字符串的唯一8位数字

Php 获取给定字符串的唯一8位数字,php,algorithm,unique-key,Php,Algorithm,Unique Key,有人知道为给定字符串生成唯一8或9位数的算法吗?最好有一个php示例,如果没有,至少还有算法 有10^9唯一的9位数字,而每个长度有256^length字符串(假设为ascii字符串) 因此,对于长度为4+的字符串,从-无法获得唯一的数字。(必须发生碰撞) 另一种选择是,您可能会选择传统的(这会产生冲突)或使用无界数字。有10^9唯一的9位数字,而每种长度都有256^长度字符串(假设为ascii字符串) 因此,对于长度为4+的字符串,从-无法获得唯一的数字。(必须发生碰撞) 另一种选择是,你可能

有人知道为给定字符串生成唯一8或9位数的算法吗?最好有一个php示例,如果没有,至少还有算法

10^9
唯一的9位数字,而每个长度有
256^length
字符串(假设为ascii字符串)

因此,对于长度为4+的字符串,从-无法获得唯一的数字。(必须发生碰撞)


另一种选择是,您可能会选择传统的(这会产生冲突)或使用无界数字。

10^9
唯一的9位数字,而每种长度都有
256^长度
字符串(假设为ascii字符串)

因此,对于长度为4+的字符串,从-无法获得唯一的数字。(必须发生碰撞)


另一种选择是,你可能会选择传统的(会发生碰撞)或使用无界数字。

会发生碰撞,是的,但既然你没有说明为什么需要这个,我假设碰撞并不重要

您可以获取字符串的md5散列(十六进制),并将其转换为我们的数字系统,然后将其截断为所需的数字

这可能对您有所帮助:

会发生碰撞,是的,但既然您没有说明为什么需要这个,我假设碰撞并不重要

您可以获取字符串的md5散列(十六进制),并将其转换为我们的数字系统,然后将其截断为所需的数字

这可能对您有所帮助: 您可以使用并归还透镜

<?php 
function crc_string($str, $len){
    return substr(sprintf("%u", crc32($str)),0,$len);
}
echo crc_string('some_string', 8);//65585849
?>
结论是,除非对自动递增的值进行1对1递增,否则在填充用户表时,总是会出现相同字节长度或更多字节长度的冲突:

echo sprintf("%08d",'1');//00000001
echo sprintf("%08d",'2');//00000002
...                      //99999999
您可以通过向冲突的值添加另一个字节来解决这个问题,或者像md5()/sha()散列函数那样包含a-z范围,从而破坏对象;p

祝你好运,你可以使用并归还透镜

<?php 
function crc_string($str, $len){
    return substr(sprintf("%u", crc32($str)),0,$len);
}
echo crc_string('some_string', 8);//65585849
?>
结论是,除非对自动递增的值进行1对1递增,否则在填充用户表时,总是会出现相同字节长度或更多字节长度的冲突:

echo sprintf("%08d",'1');//00000001
echo sprintf("%08d",'2');//00000002
...                      //99999999
您可以通过向冲突的值添加另一个字节来解决这个问题,或者像md5()/sha()散列函数那样包含a-z范围,从而破坏对象;p

祝你好运

如前所述,如果数字的位数少于要关联的字符串,则“唯一性”是不可能的

你要找的是一个好的散列函数

看看这本书。它有一个可定制的摘要长度高达512位,因此您可以创建具有8-9位十进制数字的摘要。我不知道有任何PHP实现,最初的实现语言是C。

正如前面所指出的,如果数字的位数小于要关联的字符串,则“唯一性”是不可能的

你要找的是一个好的散列函数


看看这本书。它有一个可定制的摘要长度高达512位,因此您可以创建具有8-9位十进制数字的摘要。我不知道有任何PHP实现,最初的实现语言是C。

一个8-9位数的输出哈希算法会有很多冲突,所以您的输出可能不是“唯一的”。。。寻找32位哈希函数。这是做什么用的?若您只有一组字符串,并且需要唯一地标识它们,那个么可以在数据库中为它们创建一个表,该表由字符串和一个autoincrement或sequenced integer列组成。与下面建议的散列方法不同,这还具有可逆性的优点。但这完全取决于你要做什么…一个8-9位数的输出哈希算法会有很多冲突,所以你的输出可能不是唯一的。。。寻找32位哈希函数。这是做什么用的?若您只有一组字符串,并且需要唯一地标识它们,那个么可以在数据库中为它们创建一个表,该表由字符串和一个autoincrement或sequenced integer列组成。与下面建议的散列方法不同,这还具有可逆性的优点。但这完全取决于你想做什么……我会将结果记录在表中,这样在接受结果之前,我会将其与表中现有的数字进行比较。@Bakhtiyor如果你将行的自动递增id传递给函数,我很确定你的行不会发生冲突,但简单的检查不会有什么坏处,感谢您的接受。作为一个字符串,我将传递用户的电子邮件,我保证电子邮件是唯一的,系统中不会有两封相同的电子邮件。我会将结果记录在表格中,以便在接受结果之前,我会将其与表格中的现有数字进行比较。@Bakhtiyor如果您将行的自动递增id传递给函数,我很确定您的行不会发生冲突,但简单的检查不会有任何影响,感谢接受。作为一个字符串,我将传递用户的电子邮件,我保证电子邮件是唯一的,系统中不会有两封相同的电子邮件。