网上的一篇文章中中提到:PHP 的 uniqid() 函数是将当前微妙乘以一个较大的数(1048576)后再转为十六进制的,有两点我不明白:
1.为什么要乘以一个固定的数在转换成十六进制,直接转不行吗?
2.为什么要转为16进制,十进制不行吗?
望赐教,谢谢!
网上的一篇文章中中提到:PHP 的 uniqid() 函数是将当前微妙乘以一个较大的数(1048576)后再转为十六进制的,有两点我不明白:
1.为什么要乘以一个固定的数在转换成十六进制,直接转不行吗?
2.为什么要转为16进制,十进制不行吗?
望赐教,谢谢!
2 回答1.2k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
1 回答941 阅读✓ 已解决
1 回答511 阅读✓ 已解决
2 回答812 阅读
1 回答808 阅读
1 回答746 阅读
首先不是乘,是取余数
https://github.com/php/php-src/blob/php-7.0.0/ext/standard/uniqid.c#L72-L78
这段代码说的还是很清楚的,首先拿系统时间的秒部分和微秒部分,因为微秒部分最大值是
0xF423F
(999999),所以截取末五位用于uniqid的结果,% 0x100000
就是在截取末五位(十六进制),0x100000
写成十进制就是1048576至于为什么十六进制,十六进制位数少,计算速度快。uniqid的结果不是给人阅读的,这里用十进制并没有什么显著的优点。