前几天接到个任务,甲方先前自己找外包开发的一个产品购买小站不准备继续给外包维护了,转手抛给我们,顺便提了一堆修改意见。
其中一个意见是因为外包开发的订单网站直接用数据库自增的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. example001点击隐藏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. pdf文件之itextpdf插入html内容以及中文解决方案

    简述 目前网上已经有很多种html文件直接转pdf的技术帖子,但是很少有直接将部分html作为段落插入到pdf中,而且也没有一个可以很好的解决中文显示的问题. 因此今天上午围绕这个问题进行了研究,把解 ...

  3. Spring Security 概念基础 验证流程

    Spring Security 概念基础 验证流程 认证&授权 认证:确定是否为合法用户 授权:分配角色权限(分配角色,分配资源) 认证管理器(Authentication Manager) ...

  4. 安装 Node 和 gulp

    gulp 是基于 node 实现的,那么我们就需要先安装 node. Node 是一个基于Chrome JavaScript V8引擎建立的一个平台,可以利用它实现 Web服务,做类似PHP的事. 打 ...

  5. tp5框架的获取器

    tp5的获取器功能很强大,一下子就喜欢上了,你可以在模块里任意定义表里不存在的字段,在前台调用很方便.话不多说直接上demo: 1.命名规则   get + 属性名的驼峰命名+ Attr 直接就能在m ...

  6. (转载)oracle的v$sqlarea表

    原文摘自:http: [V$SQLAREA]  本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面 ...

  7. 深度理解Node.js单线程模型

    Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这 ...

  8. web.xml is missing and <failOnMissingWebXml> is se

    摘要 maven模块化 在学习maven模块化构建项目的时候遇到了如下报错信息: web.xml is missing and <failOnMissingWebXml> is set t ...

  9. C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

    1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ...

  10. MySQL存储写入性能严重抖动分析

    案例描述: 通过iostat发现存储的写性能长期维持在10MB左右,而且因为写性能差已经导致数据库性能变差: 两个小时以后,iostat发现系统的写性能已经能够到100MB以上,数据库性能也恢复正常. ...