php生成固定长度纯数字编码的方法


Posted in PHP onJuly 09, 2015

本文实例讲述了php生成固定长度纯数字编码的方法。分享给大家供大家参考。具体如下:

很多时候我们需要一些固定长度的数字编码,如订单编号、卡号、用户编号等等!但是经常我们有的是存储在数据库中的有序编号,我们可以通过它直接转成一个固定长度的数字编码,然后更新到数据库中形成此记录的唯一编号。

<?php
/**
 * 根据日期或者是给定前缀生成唯一编号
 * User: minyifei.cn
 * Date: 15/7/7
 */
namespace Minyifei\Libs;
class SequenceNumber {
 /**
  * 根据显示宽度获取指定的 mapbit
  *
  * @param integer $width 编号显示宽度
  *
  * @return array
  */
 private static function _getMapbit($width)
 {
  $mapBits = array(
   4=>array(
    10, 2, 11, 3, 0, 1, 9, 7, 12, 6, 4, 8, 5,
   ),
   5=>array(
    4, 3, 13, 15, 7, 8, 6, 2, 1, 10, 5, 12, 0, 11, 14, 9,
   ),
   6=>array(
    2, 7, 10, 9, 16, 3, 6, 8, 0, 4, 1, 12, 11, 13, 18, 5, 15, 17, 14,
   ),
   7=>array(
    18, 0, 2, 22, 8, 3, 1, 14, 17, 12, 4, 19, 11, 9, 13, 5, 6, 15, 10, 16, 20, 7, 21,
   ),
   8=>array(
    11, 8, 4, 0, 16, 14, 22, 7, 3, 5, 13, 18, 24, 25, 23, 10, 1, 12, 6, 21, 17, 2, 15, 9, 19, 20,
   ),
   9=>array(
    24, 23, 27, 3, 9, 16, 25, 13, 28, 12, 0, 4, 10, 18, 11, 2, 17, 1, 21, 26, 5, 15, 7, 20, 22, 14, 19, 6, 8,
   ),
   10=>array(
    32, 3, 1, 28, 21, 18, 30, 7, 12, 22, 20, 13, 16, 15, 6, 17, 9, 25, 11, 8, 4, 27, 14, 31, 5, 23, 24, 29, 0, 10, 19, 26, 2,
   ),
   11=>array(
    9, 13, 2, 29, 11, 32, 14, 33, 24, 8, 27, 4, 22, 20, 5, 0, 21, 25, 17, 28, 34, 6, 23, 26, 30, 3, 7, 19, 16, 15, 12, 31, 1, 35, 10, 18,
   ),
   12=>array(
    31, 4, 16, 33, 35, 29, 17, 37, 12, 28, 32, 22, 7, 10, 14, 26, 0, 9, 8, 3, 20, 2, 13, 5, 36, 27, 23, 15, 19, 34, 38, 11, 24, 25, 30, 21, 18, 6, 1,
   ),
  );
  return $mapBits[intval($width)];
 }
 /**
  * 格式化给定时间戳
  *
  * @param integer $ts timestamp, if null use current timestamp
  *
  * @return string
  */
 private static function _fmtTS($ts=null)
 {
  $ts = $ts ?: time();
  return date(self::$_fmt, $ts);
 }
 /**
  * 根据id获取一个随机唯一编码
  * @param $id 编号
  * @param int $prefix 前缀
  * @param int $width 除前缀外长度
  * @return string
  */
 public static function generateNumber($id,$prefix=10,$width=8)
 {
  return sprintf("%s%s", $prefix,self::encode($id, $width));
 }
 /**
  * 编码转换
  *
  * @param integer $id id
  * @param integer $width 编号额外组成部分的显示宽度
  *
  * @return integer
  */
 public static function encode($id, $width)
 {
  $maximum = intval(str_repeat(9, $width));
  $superscript = intval(log($maximum) / log(2));
  $r = 0;
  $sign = 0x1 << $superscript;
  $id |= $sign;
  $mapbit = self::_getMapbit($width);
  for ($x = 0; $x < $superscript; $x++) {
   $v = ($id >> $x) & 0x1;
   $r |= ($v << $mapbit[$x]);
  }
  $r += $maximum - pow(2, $superscript) + 1;
  return sprintf("%0${width}s", $r);
 }
 /**
  * 获取唯一编号
  *
  * @param integer $id id, mostly database primary key
  * @param integer $width 编号显示宽度
  * @param integer $ts timestamp
  *
  * @return string
  */
 public static function get($id, $width, $ts=null)
 {
  return sprintf('%s%s', self::_fmtTS($ts), self::encode($id, $width));
 }
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php后门URL的防范
Nov 12 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
PHP与Web页面的交互示例详解一
Aug 04 PHP
php随机获取金山词霸每日一句的方法
Jul 09 #PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 #PHP
PHP自毁程序(慎用)
Jul 09 #PHP
PHP模板解析类实例
Jul 09 #PHP
PHP多文件上传实例
Jul 09 #PHP
php判断linux下程序问题实例
Jul 09 #PHP
php实现html标签闭合检测与修复方法
Jul 09 #PHP
You might like
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
完善的jquery处理机制
2016/02/21 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
python基础教程项目三之万能的XML
2018/04/02 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
python中count函数知识点浅析
2020/12/17 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
导师评语大全
2014/04/26 职场文书
物业管理工作方案
2014/05/10 职场文书
白莲教口号
2014/06/18 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
初中语文教学随笔
2015/08/15 职场文书