微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

《:PHP生成固定长度纯数字编码的方法》要点:
本文介绍了:PHP生成固定长度纯数字编码的方法,希望对您有用。如果有疑问,可以联系我们。

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

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

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,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生成固定长度纯数字编码的方法》等实战技能,PHPMysqL、LINUX、APP、JS,CSS全面培养人才。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐