php生成固定长度纯数字编码的方法
发布时间:2020-12-13 02:44:58 所属栏目:PHP教程 来源:网络整理
导读:《:php生成固定长度纯数字编码的方法》要点: 本文介绍了:php生成固定长度纯数字编码的方法,希望对您有用。如果有疑问,可以联系我们。 PHP编程 本篇章节讲解php生成固定长度纯数字编码的办法.供大家参考研究.具体如下: PHP编程 很多时候我们需
《:php生成固定长度纯数字编码的方法》要点: PHP编程本篇章节讲解php生成固定长度纯数字编码的办法.分享给大家供大家参考.具体如下: PHP编程很多时候我们需要一些固定长度的数字编码,如订单编号、卡号、用户编号等等!但是经常我们有的是存储在数据库中的有序编号,我们可以通过它直接转成一个固定长度的数字编码,然后更新到数据库中形成此记录的唯一编号. PHP编程
<?php
/**
* 根据日期或者是给定前缀生成唯一编号
* User: minyifei.cn
* Date: 15/7/7
*/
namespace MinyifeiLibs;
class SequenceNumber {
/**
* 根据显示宽度获取指定的 mapbit
*
* @param integer $width 编号显示宽度
*
* @return array
*/
private static function _getMapbit($width)
{
$mapBits = array(
4=>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程序设计有所赞助. 编程之家培训学院每天发布《:php生成固定长度纯数字编码的方法》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |