温馨提示×

温馨提示×

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

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

利用PHP怎么实现一个生成唯一的会员卡号功能

发布时间:2020-12-24 15:43:24 阅读:627 作者:Leah 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇文章给大家分享的是有关利用PHP怎么实现一个生成唯一的会员卡号功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

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$dnum0); 
  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$i0), 0), $v0); 
 } 
 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怎么实现一个生成唯一的会员卡号功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

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

向AI问一下细节

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

php
AI

开发者交流群×