php 生成会员卡号,PHP生成独一会员卡号
?
我们将0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分别代表数值0-35,如字母Z代表35。这样的话我 要得到一个5位的编号,最大信息量就是36的5次方了,36^5 = 60466176,即最大的5位编号相当于10进制的数字:60466176。
?
本文中为了做演示,我们假定某俱乐部发放一批10位的会员卡号,会员卡号由3位城市编号+5位卡号编码+2位校验码组成。城市编号用区号表示,如 755代表深圳,5位卡编号则由36进制的卡编号组成,后面两位校验码则是通过一定的算法生成的,校验码的用处是可以验证卡号的合法性。这样的话,我们生 成的10位卡号相当于最大能满足6000多万会员卡号,并且是不重复唯一的卡号。
?
PHP
我们使用PHP进行进制转换,10进制转36进制。class Code { //密码字典 private $dic = array( 0=>'0', 1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8', 9=>'9', 10=>'A', 11=>'B', 12=>'C', 13=>'D', 14=>'E', 15=>'F', 16=>'G', 17=>'H', 18=>'I',19=>'J', 20=>'K', 21=>'L', 22=>'M', 23=>'N', 24=>'O', 25=>'P', 26=>'Q', 27=>'R',28=>'S', 29=>'T', 30=>'U', 31=>'V', 32=>'W', 33=>'X', 34=>'Y', 35=>'Z' ); public function encodeID($int, $format=8) { $dics = $this->dic; $dnum = 36; //进制数 $arr = array (); $loop = true; while ($loop) { $arr[] = $dics[bcmod($int, $dnum)]; $int = bcdiv($int, $dnum, 0); if ($int == '0') { $loop = false; } } if (count($arr) < $format) $arr = array_pad($arr, $format, $dics[0]); return implode('', array_reverse($arr)); } public function decodeID($ids) { $dics = $this->dic; $dnum = 36; //进制数 //键值交换 $dedic = array_flip($dics); //去零 $id = ltrim($ids, $dics[0]); //反转 $id = strrev($id); $v = 0; for ($i = 0, $j = strlen($id); $i < $j; $i++) { $v = bcadd(bcmul($dedic[$id { $i } ], bcpow($dnum, $i, 0), 0), $v, 0); } return $v; } }
?
我们定义Code类,先定义密码字典,即0-Z分别对应的数值,方法encodeID($int, $format)中参数$int表示数字,$format表示位数长度,比方encodeID(123456789,5)表示将数字123456789转 换成5位的36进制编号,而方法decodeID($ids)用于将36进制的编号转换成10进制的编号。
我们可以这样来生成卡号:$code = new Code(); $card_no = $code->encodeID(888888,5);
?
如上,我们就可以得到一个5位的卡编号,它实际代表着卡号是888888(6个8)的会员编号,而实际进行转换后是5位编号:0J1VC。
?
接着,我们将城市编号和校验码加上,城市编号是已经定义好的,校验码则通过一定的算法取得,本例中,我们使用简单的算法:将前三位城市编号和五位卡编号进行md5加密,然后取md5值的前2位作为校验码,这样就得到了编号后面的两位校验码。$card_pre = '755'; $card_vc = substr(md5($card_pre.$card_no),0,2); $card_vc = strtoupper($card_vc); echo $card_pre.$card_no.$card_vc;
?
实际应用中,可以通过数据库得到10进制的编号,保证编号唯一,再将上述代码组合,最终生成一个10位的不重复的会员卡号。
?
网友评论
文明上网理性发言,请遵守 新闻评论服务协议我要评论
立即提交
专题推荐独孤九贱-php全栈开发教程
全栈 100W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
玉女心经-web前端开发教程
入门 50W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
天龙八部-实战开发教程
实战 80W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
php 生成会员卡号,PHP生成独一会员卡号相关推荐
- PHP生成一个不重复的会员号,php生成一个不重复的会员号
在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号. 效果图如下: 当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号. ...
- python生成订单号或生成任意序列
python生成订单号或生成任意序列 示例代码: import time# 生成订单号 def get_order_code():# 年月日时分秒+time.time()的后7位order_no = ...
- 微信公众号怎么生成带粉丝关注统计的渠道二维码
关于微信公众号在线生成带粉丝关注统计的渠道二维码,第三方工具微号帮提供了渠道二维码生成功能实现,可以为公众号生成带粉丝关注统计的渠道二维码,可以生成多个不同的渠道二维码,每个渠道二维码都可以单独统计粉 ...
- java代码:双色球号随机生成(极其简洁!)
https://blog.csdn.net/qq_40677004/article/details/79699270 原 java代码:双色球号随机生成(极其简洁!) 2018年03月26日 15:5 ...
- 微信公众号怎么生成能追踪效果的二维码?
微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...
- 订单号怎样生成才能好用又好看,难倒了20多位产品经理
https://www.jianshu.com/p/3ef577eaacac 1.三个真实的案例 案例1:最近面试的将近20位产品经理里面,我都会问一道问题:请您为我公司的订单系统设计一套订单号的生成 ...
- 正阅读微信小说分销系统-视频教程-6.生成推广文章-代理商必看-没有公众号也能推哦!
大家最烦的就是,我没有公众号. 正阅读微信小说分销系统-视频教程-6.代理商必看-没有公众号也能推哦! 我荐文学-原创.授权文学分销平台.教程系列. 个人的也没有 我不会弄, 我不会申请公众号 能不能 ...
- java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成
1.前言 这是我写的工具类之一:根据日期生成唯一顺序订单号. 用Java 配合 Redis 实现包含日期的顺序订单号的生成, 效率可以达到 2500+/s 1000W+/h 个 . 2.基本介绍 框架 ...
- ## 根据身份证号自动生成年龄以及性别
根据身份证号自动生成年龄以及性别 <div class="form-group"><label class="col-sm-3 control-labe ...
- 判断身份证号,根据身份证号自动生成出生日期
判断身份证号,根据身份证号自动生成出生日期 idCodeValid(rule, value, callback) => {let reg = /(^[1-9]\d{5}(18|19|([23]\ ...
最新文章
- python turtle画圣诞树-Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
- Yii2 Pjax的简单使用
- 多线程与高并发(五):强软弱虚四种引用以及ThreadLocal的原理与源码
- Linux内核源码目录说明
- abortonerror_如何在多项目目录顶层的Android Gradle Plugin中禁用lint abortOnError
- ETDM:基于显式时间差分建模的视频超分辨率(CVPR 2022)
- 问卷调查 asp 源码一起研究
- 马斯克称新一代Roadster就有望在2023年开始交付
- hdu1247 字典树
- IE6和IE7的line-height和现代浏览器不一致的问题
- microsoft store 安装包_LOL英雄联盟手游官方安装包
- 苹果Pro安装win10鼠标不能用的问题
- 计算机电缆电阻值,一文看懂5个电线电缆电阻检测方法
- 电视游戏大厅现状:“渠道为王”遭遇水土不服
- iOS开发-代替UDID被弃用和UUID使用缺陷的解决方案
- 大厂程序员都会的分布式RPC框架,直接无私打包分享,手慢无
- 源程序、目标程序、汇编程序、编译程序、解释程序
- 使用Windows XP 的放大镜、屏幕和键盘(转)
- Unity 开发 Hololens2 MR应用程序
- java里%是什么_java里.是什么意思?
热门文章
- 安全修复之Web——Spring Framework 远程代码执行漏洞
- 6亿视频号的8种私域流量变现模式
- 过敏体质也会遗传给孩子,孕期妈妈应该尽早预防
- 全国计算机一级第七套试题及答案,计算机一级考试第七套试卷及答案.doc
- 搜索引擎使用小技巧(通配符)
- github博客迁移——图床搭建
- 阿里开源的10个神级项目
- 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”...
- Linux检查图形化界面是否安装
- 编译linux源码报错,记录一次Linux内核源码编译实验