php序号发生器,数字重组,可以隐藏原来的1,2,3。。。
一个晚上的成果,原理:
将1,2,3,4,5,6,7,8,9,0映射到9,5,1,0,4,8,7,3,2,6
同理映射base,base有1-10种数组,也就是可以一位数到10位数
$base 实际上是下面的根据下面数组处理得来的。
array(
array(0),
array(1,0),
array(2,0,1),
array(3,0,2,1),
array(4,0,1,3,2),
array(5,1,0,4,3,2),
array(6,2,0,4,5,1,3),
array(7,3,0,4,6,2,1,5),
array(8,4,0,1,5,7,3,2,6),
array(9,5,1,0,4,8,7,3,2,6)
);
参数$num是种子数,$m是结果位数,$offset一个偏移值(可以更有效的打乱数字)。
function seq10($num, $m, $offset = 0) {
static $seq = array(9,5,1,0,4,8,7,3,2,6);
static $base = array(
array(1,10),
array(10,1,100),
array(100,1,10,1000),
array(1000,1,100,10,10000),
array(10000,1,10,1000,100,100000),
array(100000,10,1,10000,1000,100,1000000),
array(1000000,100,1,10000,100000,10,1000,10000000),
array(10000000,1000,1,10000,1000000,100,10,100000,100000000),
array(100000000,10000,1,10,100000,10000000,1000,100,1000000,1000000000),
array(1000000000,100000,10,1,10000,100000000,10000000,1000,100,1000000,10000000000)
);
$res = $num;
for ($i = 0; $i < 16; $i++) {
$num = 0;
for ($j = 0; $j < $m; $j++) {
$num += $seq[$res % 10] * $base[$m-1][$j];
$res /= 10;
}
$res = ($num + $offset + $i) % $base[$m-1][$m];
}
return $res;
}
通过调用上面的函数,便可以进行任意数字映射,如1-100映射结果到1-100
$arr = array();
$start = microtime(true);
for ($i = 1; $i < 100; $i++) $arr[$i] = seq10($i, 2, 12);
$end = microtime(true);
print_r($arr);
echo count($arr)."\n";
echo $end - $start; 结果:
E:\>php seq.php
Array
(
[1] => 8
[2] => 88
[3] => 16
[4] => 75
[5] => 0
[6] => 58
[7] => 70
[8] => 91
...
[90] => 29
[91] => 51
[92] => 66
[93] => 23
[94] => 62
[95] => 54
[96] => 22
[97] => 3
[98] => 34
[99] => 72
)
99
0.002357006072998
1-10映射到6位数
$arr = array();
$start = microtime(true);
for ($i = 1; $i < 10; $i++) $arr[$i] = seq10($i, 6, 123456);
$end = microtime(true);
print_r($arr);
echo count($arr)."\n";
echo $end - $start; E:\>php seq.php
Array
(
[1] => 721627
[2] => 782511
[3] => 256581
[4] => 969508
[5] => 451505
[6] => 928354
[7] => 302664
[8] => 387627
[9] => 817626
)
9
0.00050187110900879
唯一性验证:
$arr = array();
$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) $arr[seq10($i, 6, 123456)] = 1;
$end = microtime(true);
//print_r($arr);
echo count($arr)."\n";
echo $end - $start; E:\>php seq.php
1000000
36.970967054367
php序号发生器,数字重组,可以隐藏原来的1,2,3。。。的更多相关文章
- JS对表格排序(支持对序号,数字,字母,日期)
JS对表格排序(支持对序号,数字,字母,日期) 前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSort ...
- 编程算法基础-数字数码管-隐藏password
作业 数字数码管 个数码管) @@@@ 0 @ @ 1 2 @ @ 3 @@@@ ...
- 无废话ExtJs 入门教程九[数字字段:NumberField、隐藏字段Hidden、日期字段:DataFiedl]
无废话ExtJs 入门教程九[数字字段:NumberField.隐藏字段Hidden.日期字段:DataFiedl] extjs技术交流,欢迎加群(201926085) 继上第六节内容,我们在表单里加 ...
- POI问题总结,关于数字级联及多级级联(三级以上)
目录 最近公司业务需要用到excel,并且要导出模板,今天为止所有的功能都已经实现了,在这里对出现的一些问题做一个总结. 效果图: 这是一个五级联动的数据,其中第一列是数字开头,实现了五级联动 问题1 ...
- [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
We are given a personal information string S, which may represent either an email address or a phone ...
- 页游安全攻与防,SWF加密和隐藏密匙
原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了.游戏通信产生的封包,内容是否可 ...
- Java实现 LeetCode 831 隐藏个人信息(暴力)
831. 隐藏个人信息 给你一条个人信息字符串 S,它可能是一个 邮箱地址 ,也可能是一串 电话号码 . 我们将隐藏它的隐私信息,通过如下规则: 电子邮箱 定义名称 name 是长度大于等于 2 (l ...
- 超实用的 JavaScript 代码片段( ES6+ 编写)
Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...
- infoq 微信后台存储架构
infoq 上微信后台存储架构 视频很是值得认真一听,大概内容摘要如下: 主要内容:同城分布式强一致,园区级容灾KV存储系统 - sync 序列号发生器 移动互联网场景下,频繁掉线重连,使用 ...
随机推荐
- SonarQube介绍及部署
SonarQube介绍及部署 编写人:罗旭成 编写时间:2014-5-28 SonarQube简介 SonarQube是一个用于代码质量管理的开源平台(Java开发),用于管理源代码的质量,可以从七个 ...
- JS代码大全(都是网上看到自己整理的)
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- angular2中的路由转场动效
1.为什么有的人路由转动效离场动效不生效? 自己研究发现是加动效的位置放错了 如下: <---! animate-state.component.html --> <div sty ...
- R-模式(mode)和类(class)
数据模式:mode函数显示任何对象的模式.常见的单个的对象模式是逻辑型(Logical).数值型(Numeric).字符型(Character). 常用到的数据模式是列表(list). 逻辑型:TRU ...
- hdu4009最小树形图
多建一个根,连到每一个点,然后花费是建水井的钱 然后跑一边最小树形图即可,这题必定有解,因为可以从根开始到每一点,可以不用判无解的情况 #include<map> #include< ...
- no persistent classes found for query class: FROM com.vrv.paw.domain.User
在整合Spring+Hibernate时报该错误,sessionFactory配置如下: <bean id="sessionFactory" class="org. ...
- iptables详解(9):iptables的黑白名单机制
注意:在参照本文进行iptables实验时,请务必在个人的测试机上进行,因为如果iptables规则设置不当,有可能使你无法连接到远程主机中. 前文中一直在强调一个概念:报文在经过iptables的链 ...
- JS种正则表达式的基础用法
基础语法 元字符 常用元字符 含义 . 匹配除换行符以外的任意字符 \w 匹配字母数字或下划线 \W 匹配不是字母.数字.下划线的字符 \d 匹配数字,相当于[0-9] \D 匹配不是数字的字符 \s ...
- 034——VUE中表单控件处理之使用vue控制radio表单的实例操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用minidom来处理XML的示例
http://www.cnblogs.com/xuxm2007/archive/2011/01/16/1936610.html http://blog.csdn.net/ywchen2000/arch ...