项目里有一个验证银行卡的地儿,大量跑测试的时候一直调接口也是有几分没必要,查了下,银行卡都是按照LUHN算法校验的。
开始写了个简单的luhn函数验证
/**
* LUHN算法
* @param string $s 待验证的字符串
* @return boolean
* */
function luhn($s) {
$n = 0;
for($i=strlen($s)-1; $i>=0; $i--) {
if($i % 2) $n += $s{$i};
else {
$t = $s{$i} * 2;
if($t > 9) $t = $t{0} + $t{1};
$n += $t;
}
}
return ($n % 10) == 0;
}
但是呢,测试的时候发现,16位银行卡可以判断,19位的有点问题。
然后找了个免费的接口。
https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=银行卡号&cardBinCheck=true
校验成功返回
{“cardType”:“CC”,“bank”:“CIB”,“key”:“1544448726136-8178-11.253.105.235-1652600308”,“messages”:[],“validated”:true,“stat”:“ok”}
/**
* 简单的根据银行卡号匹配银行
* @param string $cardid 银行卡号
* @return string 开户行|卡号不存在
*