/** * 生成一个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; } }