/**
* 生成一个16位卡号
* @param int $num
* @return \Illuminate\Http\JsonResponse
*/
public function applyCardNum($num = 1)
{
switch ($num) {
case '1':
//大学生卡
$type = '01';
break;
case '2':
//普卡
$type = '02';
break;
case '3':
//银卡
$type = '03';
break;
case '4':
//金卡
$type = '04';
break;
case '5':
//白金卡
$type = '05';
break;
case '6':
//黑金卡
$type = '06';
break;
case '7':
//钻石卡
$type = '07';
break;
case '8':
//商户卡
$type = '08';
break;
default:
//普卡
$type = '02';
}
return $this->card($type, $num);
}
/**
* 生成16位卡号
* @param $type
* @return string
*/
public function card($type, $num)
{
$card = substr(date('Y'), 2, 2);
$card = $card . $type;
$card = $card . rand(1000, 9999) . rand(1000, 9999) . rand(1000, 9999);
$z = '/(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3,}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){3,})\d/';
$z1 = '/([\d])\1{2,}/';
if ($num > 5) {
;
$chars = [0, 1, 2, 3, 5, 6, 7, 8, 9];
$card = substr($card, 1, 4) . substr($card, -4) . str_replace(4, $chars[rand(0, 9)], substr($card, 5));
}
if (preg_match($z, $card)) {
return $this->card($type, $num);
} elseif (preg_match($z1, $card)) {
return $this->card($type, $num);
}
if (CreditCardApplys::where(['card_num' => $card])->whereIn('application_results', [0, 1, 2, 4, 5, 6])->exists()|| User::where(['username' => $card])->exists()) {
return $this->card($type, $num);
} else {
return $card;
}
}
转载于:https://my.oschina.net/vioyangx/blog/2247031
本文介绍了一种用于生成16位卡号的算法,该算法根据不同的卡类型(如大学生卡、普卡、银卡等)生成特定的卡号,并通过一系列规则确保卡号的唯一性和合规性。
893

被折叠的 条评论
为什么被折叠?



