一个双射类,在给定自然数空间一对一完全映射,可逆运算,不可猜
程序员文章站
2022-06-10 08:18:25
...
使用大质数、模运算原理,在给定自然数空间,把每个自然数映射到另一个自然数,并且被映射的自然数只被此自然数映射。 主要用于生成和自增id对应的在自然数空间均匀分布的不可猜解的对应自然数。 用于快递物流单号、订单号、图片路径等有隐私保护的资源uri。
使用大质数、模运算原理,在给定自然数空间,把每个自然数映射到另一个自然数,并且被映射的自然数只被此自然数映射。
主要用于生成和自增id对应的在自然数空间均匀分布的不可猜解的对应自然数。
用于快递物流单号、订单号、图片路径等有隐私保护的资源uri。
/** * 双射类 * 在给定自然数空间一对一完全映射,可逆运算,不可猜解 * @author liuxu * */ class Bijective { static private $defaultPrime = '85310501873';//请使用个位为"3"、"7"、"9"的质数 static public function getRandPrime() { return self::getMinPrime(rand(100000,900000)*100000+rand(100000,900000)); } static public function getMinPrime($min) { $number = $min; while(true) { if(self::isPrime($number)) break; $number++; } return $number; } static public function isPrime($number) { $sqrt = intval(bcsqrt($number,0)); for($i=2;$i$value) { $numberList[$key] = str_pad(self::loop($value,strlen($value)),strlen($value),'0',STR_PAD_LEFT); } $number = implode('',$numberList); return $number; } }