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

前端之家收集整理的这篇文章主要介绍了php生成固定长度纯数字编码的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

PHP;"> array( 10,2,11,3,1,9,7,12,6,4,8,5,),5=>array( 4,13,15,10,14,6=>array( 2,16,18,17,7=>array( 18,22,19,20,21,8=>array( 11,24,25,23,9=>array( 24,27,28,26,10=>array( 32,30,31,29,11=>array( 9,32,33,34,35,12=>array( 31,37,36,38,); 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),$width)); } }

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

猜你在找的PHP相关文章