前几天接到个任务,甲方先前自己找外包开发的一个产品购买小站不准备继续给外包维护了,转手抛给我们,顺便提了一堆修改意见。
其中一个意见是因为外包开发的订单网站直接用数据库自增的id作为订单号,导致订单号又短又好记,下单的人直接通过订单号就能推测出该产品的销量,为甲方业务员的吹嘘设下巨大的阻碍。
不出所料这个包袱到我的桌上。
通过搜索,我列出几种方法供领导选择:
 
方法\原始id值 优缺点 1 5 10 100
订单创建时间戳转年月日时分秒后加左边拼0的id,长度22
优点:不用改动表结构数据
缺点:懂行的人一眼就能看穿
2017032110445700000001 2017032110445700000005 2017032110445700000010 2017032110445700000100
所有id全加41100000,长度8
优点:比较短,8位容易阅读
缺点:需要改动表数据
41100001 41100005 41100010 41100100
给订单表增加一个字段,使用随机字符串生成给定长度
优点:订单号与id完全无关,难以判断销量
缺点:需要改动表结构
随机 随机 随机 随机
使用github插件,optimus 优点:不用改动表结构数据 647890742 443442450 191221 1452509963
 
根据指示,似乎决定使用optimus,在github上搜,第一个就是。
先在本地搭了一个测试环境,使用composer拉下源码后,在自带的bin目录下运行
php optimus spark
得到三个配置必须参数
Prime:2147483647以下一个较大的素数
Inverse:一个逆素数,使(PRIME * INVERSE) & 2147483647 == 1
Random:一个2147483647以下的随机数
建个测试文件,设置参数就能用了。
 
use Jenssegers\Optimus\Optimus;
//根据测试文件和vendor所在的位置正确设置路径
require_once(__DIR__.'/../vendor/autoload.php');
$config=array(
'prime'=>653936159,
'inverse'=>7845343,
'random'=>421554952
);
$optimus=new Optimus($config['prime'],$config['inverse'],$config['random']);
$exampleId=rand(1,99999);
$encode=$optimus->encode($exampleId);
$decode=$optimus->decode($encode);
echo "raw:{$exampleId}<br>encode:{$encode}<br>decode:{$decode}";
该混淆算法使用了Donald Knuth的整型哈希,具体算式:
ENCODE = ( ( RAW * PRIME ) & ( 2^32-1 ) ) ^ RANDOM
DECODE = ( ( ENCODE ^ RANDOM ) * INVERSE ) & ( 2^32-1 )
( PRIME * INVERSE ) & ( 2^32-1 ) = 1
 
缺点是假如订单被打印成纸了,那么三个参数必须固定,再也不能变换。

分享一款好用的PHP下ID混淆插件的更多相关文章

  1. 分享20款移动开发中很有用的 jQuery 插件

    今天,很显然每个网站都需要有一个移动优化的界面以提高移动用户的使用体验.在开发任何移动项目时,要尽可能保持每一种资源尺寸都尽可能的小,以给最终用户提供一个好的体验是非常重要的.在这篇文章中我们已经编制 ...

  2. 分享七款视差滚动效果的jQuery 插件

    视差(Parallax)是指从不同的点看一个物体时形成的视觉差异,这个名词是源自希腊文的παράλλαξις (parallaxis),意思是”改变”.在网页设计中,视差滚动(Parallax Scr ...

  3. 【jquery】fancybox 是一款优秀的 jquery 弹出层展示插件

    今天给大家分享一款优秀的 jquery 弹出层展示插件 fancybox.它除了能够展示图片之外,还可以展示 flash.iframe 内容.html 文本以及 ajax 调用,我们可以通过 css ...

  4. 分享8款绚丽的HTML5/jQuery特效插件

    有几天没有分享前端资源了,今天要向大家分享15款非常给力的HTML5/jQuery特效插件,废话少说,一起来看看. 1.CSS3图片重力感应特效 很酷的一款CSS3模拟重力感应特效,你可以拖动图片来甩 ...

  5. 分享一款页面视差滚动切换jquery.localscroll插件

    今天给大家分享一款页面视差滚动切换jquery.localscroll插件. 滚动鼠标液动条看下页面的切换效果.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera ...

  6. 分享10款常用的jQuery焦点图插件

    爱编程一直在收集整理编程相关的知识和解决方案,今天小编为大家带来10款非常常用的jquery焦点图插件. 1.jQuery可自动播放动画的焦点图插件 之前我们已经分享过很多非常实用的jQuery焦点图 ...

  7. 分享10款功能强大的HTML5/CSS3应用插件

    1.纯CSS3美化Checkbox和Radiobox按钮 外观很时尚 利用CSS3我们可以打造非常具有个性化的用户表单,今天我们就利用CSS3美化Checkbox复选框和Radiobox单选框.CSS ...

  8. 分享10款激发灵感的最新HTML5/CSS3应用

    1.HTML5/CSS3实现iOS Path菜单 菜单动画很酷 Path菜单相信大家都不陌生吧,它在iOS中非常流行,今天我们要分享的菜单就是利用HTML5和CSS3技术来模拟实现这款iOS Path ...

  9. 分享8款最新HTML5/CSS3功能插件及源码下载

    1.HTML5/CSS3鬼脸表情下拉菜单 超级可爱 这款HTML5/CSS3鬼脸表情下拉菜单真的很特别,虽然菜单的实现并没有利用复杂的HTML5/CSS3技术,但是创意的确不错. 在线演示 源码下载 ...

随机推荐

  1. Linux之通配符

    前言:学习通配符有点为正则表达式打基础的感觉……之前学python有学过正则表达式,所以这篇博客学起来还是挺快的. 特殊符号 | #管道符,或者(正则) > #输出重定向 >> #输 ...

  2. webpackage 2.x 使用

    webpackage 2.x 使用 安装---(在项目目录下) //1.初始化npm的配置(添加package.json) npm init //2.安装 webpackage npm install ...

  3. Java基础(3) -字符串

    字符串-String 1.定义&&初始化 使用双引号把字符括起来 String str = "test"; 2.字符串的提取-substring String a ...

  4. Chrome控制台使用详解

    Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...

  5. cygwin安装gcc/g++

    安装cygwin如果按照默认的方式一直点下去的话,安装完了会发现没有安装gcc/g++. 这个时候可以在安装文件的目录打开命令行,并输入: setup-x86_64.exe -q -P wget -P ...

  6. CSS使用心得小结

    CSS心得 最近对CSS的使用有一些小心得,在此写下来给大家分享分享 .最后附上选择器的实例代码. ------DanlV CSS是什么 层叠样式表(英文全称:Cascading Style Shee ...

  7. OpenStack(企业私有云)万里长征第四步——DevStack整体安装规划及使用

    一.前言 前期成功通过DevStack安装OpenStack,现将从机房规划到虚拟机搭建的整个过程总结如下,以供日后查阅或有需之人参考. 二.机房规划 这个整个安装过程的重点,能不能成功就看规划的如何 ...

  8. Tkinter开发第一个桌面程序HelloWorld

    在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...

  9. HDU 2203 亲和串(KMP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2203 题目: 亲和串 Time Limit: 3000/1000 MS (Java/Others)   ...

  10. AppDomain 及BuildManager

    一.AppDomain.CurrentDomain.DynamicDirectory 只有在Web项目中在值,动态执行目录像下面这样 Framework\v4.0.30319\Temporary AS ...