我们在开发过程中,需要验证银行卡是否符合规则,下面提供判验证银行卡的函数给到大家。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //检查是否为银行卡 if (!function_exists('isBankNo')){ function isBankNo($banknumber){ if ($banknumber == null || $banknumber == ""){ return false; } //取出最后一位 $last = substr($banknumber,(strlen($banknumber) - 1), 1); //前15或18位 $front_last = substr($banknumber,0, strlen($banknumber) - 1); $front_arr = Array(); //将前置部分号码存入数组(前15或18位) $i= strlen($front_last) - 1; for ($i ; $i > -1; $i--) { //前15或18位倒序存进数组 array_push($front_arr,substr($front_last,$i, 1)); } $sum1 = $sum2 = $sum3 = 0; for ($j = 0; $j < count($front_arr); $j++) { if (($j + 1) % 2 == 1) { // 奇数数字和 if (intval ($front_arr[$j]) * 2 < 9) { $sum1 += intval($front_arr[$j]) * 2; } else { $str = intval($front_arr[$j]) * 2; $str1 = 1; $str2 = $str % 10; $sum2 += $str1; $sum2 += $str2; } } else { // 偶数数字和 $sum3 += intval($front_arr[$j]); } } $sum = $sum1 + $sum2 + $sum3; $luhn = $sum % 10 == 0 ? 0 : 10 - $sum % 10; if ($luhn == intval($last)) { return true; } else { return false; } } } |