您好,欢迎访问一九零五行业门户网

一个双射类,在给定自然数空间一对一完全映射,可逆运算,不可猜

使用大质数、模运算原理,在给定自然数空间,把每个自然数映射到另一个自然数,并且被映射的自然数只被此自然数映射。 主要用于生成和自增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<=$sqrt;$i++) { if(bcmod($number,$i)==='0') { return false; } } return true; } static public function mod($number,$len=10) { return bcmod(bcmul($number,self::$defaultprime,0),bcpow(10,$len,0)); } static public function loop($number,$len=8) { $min = $prev = $number; for($i=1;;$i++) { $next = self::mod($prev,$len); if($next==$number) break; $min = min($min,$next); $prev = $next; } $offset = ( $min % $i ) + 1; for($j=0;$j$value) { $numberlist[$key] = str_pad(self::loop($value,strlen($value)),strlen($value),'0',str_pad_left); } $number = implode('',$numberlist); return $number; }}
其它类似信息

推荐信息