PHP生成唯一会员卡号

 更新 2020-09-20 浏览 796次

PHP生成唯一会员卡号
描述:PHP生成唯一会员卡号,输入一个1-10,000,000的数字,会生成一个10位的卡号。
基础属性
详细介绍

HTML代码:

<p>
请输入一个数字:<input type="text" class="input" id="card" maxlength="8"> 
<input type="button" class="btn" id="getCard" value="生成卡号">
</p>
<div id="result"></div>

引入Jquery并通过$.post请求后端PHP处理:

<script src="js/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    $("#getCard").click(function(){
        var card = $("#card").val();
        $.post("code.php",{no:card},function(msg){
            if(msg==''){
                $("#result").html('出错了!');
            }else{
                $("#result").html('生成卡号为:'+msg);
            }
        });
    });
});
</script>

PHP处理类:

/*
 * 进制转换--用于生成卡号
 */
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'
	);
	//ID
	//private $ids;
	//长度
	//private $format = 8;

	public function encodeID($int, $format=8) {
		$dics = $this->dic;
		//print_r($dics);exit;
		$dnum = 36; //进制数
		$arr = array ();
		$loop = true;
		while ($loop) {
			$arr[] = $dics[bcmod($int, $dnum)];
			$int = bcdiv($int, $dnum, 0);
			//echo $int.'<br/>';
			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;
	}
}

调用类方法生成唯一卡号:

$no = intval($_POST['no']);
if($no==0 || $no>=10000000){
	echo '';exit;
}
$code = new Code();
$card_no = $code->encodeID($no,5);
$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;


php实例唯一会员卡号PHP生成卡号
相关内容