PHP功能函数-验证否为银行卡

作者: | 2017年10月20日

我们在开发过程中,需要验证银行卡是否符合规则,下面提供判验证银行卡的函数给到大家。

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;
        }
    }
}