温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php怎么生成固定长度纯数字编码

发布时间:2021-08-03 21:11:35 阅读:160 作者:chen 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要讲解了“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(
    1021130197126485,
   ),
   5=>array(
    4313157862110512011149,
   ),
   6=>array(
    2710916368041121113185151714,
   ),
   7=>array(
    180222831141712419119135615101620721,
   ),
   8=>array(
    118401614227351318242523101126211721591920,
   ),
   9=>array(
    242327391625132812041018112171212651572022141968,
   ),
   10=>array(
    32312821183071222201316156179251184271431523242901019262,
   ),
   11=>array(
    91322911321433248274222050212517283462326303719161512311351018,
   ),
   12=>array(
    31416333529173712283222710142609832021353627231519343811242530211861,
   ),
  );
  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怎么生成固定长度纯数字编码这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×