![]() |
1
15
有一些很好的答案,但对我来说,这些方法似乎很愚蠢。
为什么不呢 将哈希读取为二进制:
然后使用
把这个变成两个
但要注意碰撞! 减少这个数字意味着增加两个不同的[输入值]具有相同输出的概率。 我认为更好的方法是使用双射函数的“ID加密”。所以不会发生碰撞!对于最简单的类型,只需使用 Affine_cipher 最大输入值范围为0到25的示例:
当然,这是不安全的,但如果没有人知道你的加密方法,那么没有安全的原因,那么这种方式是更快和碰撞安全。 |
![]() |
2
66
PHP中的MD5或SHA1散列返回一个十六进制数,所以您所需要做的就是转换基。PHP有一个函数可以为您实现这一点:
因为您需要一个有限大小的数字,所以可以使用模数除法将其置于您想要的范围内。
正如artefactor在注释中指出的,使用这种方法将导致一个数字超出PHP中整数的最大大小,并且模除后的结果将始终为0。但是,获取包含前16个字符的哈希的子字符串不存在此问题。计算初始大数的修订版本:
|
![]() |
3
19
你可以试试
说到这里,
|
|
4
7
切掉散列的问题是冲突,要避免冲突,请尝试:
这个
这给了我们一个32位的整数,32位为负,64位为正。这个整数可以像数据库中的ID一样存储。这不会有冲突的问题,因为它适合32位的变量,一旦你用
|
![]() |
5
1
首先,md5基本上是折衷的,所以除了非关键散列之外,您不应该使用它。
PHP5具有
将最后一个参数设置为true将得到一个二进制数据字符串。或者,您可以将生成的十六进制哈希值拆分为2个字符的片段,然后分别将它们转换为整数,但我希望这会慢得多。 |
![]() |
6
0
hashid
.
|
|
7
0
只需使用下面的手动哈希方法:
并获取小数点后的前6个值作为要使用的ID。在实际创建ID之前检查唯一性,如果存在冲突,则将最后一位数字增加+1,直到无冲突为止。
|
![]() |
Rlyeh · 如何在python中对N个列表的元素求和? 2 年前 |
![]() |
Mr. Kisus · 如何删除数字对中的第二个数字 3 年前 |
![]() |
peter · 检查用户输入是否为数字,然后从切换到打印 7 年前 |
![]() |
Simon · 将整数拆分为单独的部分 7 年前 |
![]() |
Boby Marley · 如何在Javascript中求和 7 年前 |
![]() |
Manuel · 如何处理熊猫数据框中的小数 7 年前 |