PHP 验证银行卡是否存在,匹配开户行

项目里有一个验证银行卡的地儿,大量跑测试的时候一直调接口也是有几分没必要,查了下,银行卡都是按照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 开户行|卡号不存在  
 * */
function bankCard($cardid){
    $card = file_get_contents("https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo={$cardid}&cardBinCheck=true");
    $bankCard = json_decode($card,ture);
    $bank = array(
        "CDB"=>"国家开发银行","ICBC"=>"中国工商银行","ABC"=>"中国农业银行","BOC"=>"中国银行","CCB"=>"中国建设银行","PSBC"=>"中国邮政储蓄银行","COMM"=>"交通银行","CMB"=>"招商银行","SPDB"=>"上海浦东发展银行","CIB"=>"兴业银行","HXBANK"=>"华夏银行","GDB"=>"广东发展银行","CMBC"=>"中国民生银行","CITIC"=>"中信银行","CEB"=>"中国光大银行","EGBANK"=>"恒丰银行","CZBANK"=>"浙商银行","BOHAIB"=>"渤海银行","SPABANK"=>"平安银行","SHRCB"=>"上海农村商业银行","YXCCB"=>"玉溪市商业银行","YDRCB"=>"尧都农商行","BJBANK"=>"北京银行","SHBANK"=>"上海银行","JSBANK"=>"江苏银行","HZCB"=>"杭州银行","NJCB"=>"南京银行","NBBANK"=>"宁波银行","HSBANK"=>"徽商银行","CSCB"=>"长沙银行","CDCB"=>"成都银行","CQBANK"=>"重庆银行","DLB"=>"大连银行","NCB"=>"南昌银行","FJHXBC"=>"福建海峡银行","HKB"=>"汉口银行",
        "WZCB"=>"温州银行","QDCCB"=>"青岛银行","TZCB"=>"台州银行","JXBANK"=>"嘉兴银行","CSRCB"=>"常熟农村商业银行","NHB"=>"南海农村信用联社","CZRCB"=>"常州农村信用联社","H3CB"=>"内蒙古银行","SXCB"=>"绍兴银行","SDEB"=>"顺德农商银行","WJRCB"=>"吴江农商银行","ZBCB"=>"齐商银行","GYCB"=>"贵阳市商业银行","ZYCBANK"=>"遵义市商业银行","HZCCB"=>"湖州市商业银行","DAQINGB"=>"龙江银行","JINCHB"=>"晋城银行JCBANK","ZJTLCB"=>"浙江泰隆商业银行","GDRCC"=>"广东省农村信用社联合社","DRCBCL"=>"东莞农村商业银行","MTBANK"=>"浙江民泰商业银行","GCB"=>"广州银行","LYCB"=>"辽阳市商业银行","JSRCU"=>"江苏省农村信用联合社","LANGFB"=>"廊坊银行","CZCB"=>"浙江稠州商业银行","DYCB"=>"德阳商业银行","JZBANK"=>"晋中市商业银行","BOSZ"=>"苏州银行","GLBANK"=>"桂林银行","URMQCCB"=>"乌鲁木齐市商业银行","CDRCB"=>"成都农商银行",
        "ZRCBANK"=>"张家港农村商业银行","BOD"=>"东莞银行","LSBANK"=>"莱商银行","BJRCB"=>"北京农村商业银行","TRCB"=>"天津农商银行","SRBANK"=>"上饶银行","FDB"=>"富滇银行","CRCBANK"=>"重庆农村商业银行","ASCB"=>"鞍山银行","NXBANK"=>"宁夏银行","BHB"=>"河北银行","HRXJB"=>"华融湘江银行","ZGCCB"=>"自贡市商业银行","YNRCC"=>"云南省农村信用社","JLBANK"=>"吉林银行","DYCCB"=>"东营市商业银行","KLB"=>"昆仑银行","ORBANK"=>"鄂尔多斯银行","XTB"=>"邢台银行","JSB"=>"晋商银行","TCCB"=>"天津银行","BOYK"=>"营口银行","JLRCU"=>"吉林农信","SDRCU"=>"山东农信","XABANK"=>"西安银行","HBRCU"=>"河北省农村信用社","NXRCU"=>"宁夏黄河农村商业银行","GZRCU"=>"贵州省农村信用社","FXCB"=>"阜新银行","HBHSBANK"=>"湖北银行黄石分行","ZJNX"=>"浙江省农村信用社联合社","XXBANK"=>"新乡银行","HBYCBANK"=>"湖北银行宜昌分行",
        "LSCCB"=>"乐山市商业银行","TCRCB"=>"江苏太仓农村商业银行","BZMD"=>"驻马店银行","GZB"=>"赣州银行","WRCB"=>"无锡农村商业银行","BGB"=>"广西北部湾银行","GRCB"=>"广州农商银行","JRCB"=>"江苏江阴农村商业银行","BOP"=>"平顶山银行","TACCB"=>"泰安市商业银行","CGNB"=>"南充市商业银行","CCQTGB"=>"重庆三峡银行","XLBANK"=>"中山小榄村镇银行","HDBANK"=>"邯郸银行","KORLABANK"=>"库尔勒市商业银行","BOJZ"=>"锦州银行","QLBANK"=>"齐鲁银行","BOQH"=>"青海银行","YQCCB"=>"阳泉银行","SJBANK"=>"盛京银行","FSCB"=>"抚顺银行","ZZBANK"=>"郑州银行","SRCB"=>"深圳农村商业银行","BANKWF"=>"潍坊银行","JJBANK"=>"九江银行","JXRCU"=>"江西省农村信用","HNRCU"=>"河南省农村信用","GSRCU"=>"甘肃省农村信用","SCRCU"=>"四川省农村信用","GXRCU"=>"广西省农村信用","SXRCCU"=>"陕西信合","WHRCB"=>"武汉农村商业银行","YBCCB"=>"宜宾市商业银行",
        "KSRB"=>"昆山农村商业银行","SZSBK"=>"石嘴山银行","HSBK"=>"衡水银行","XYBANK"=>"信阳银行","NBYZ"=>"鄞州银行","ZJKCCB"=>"张家口市商业银行","XCYH"=>"许昌银行","JNBANK"=>"济宁银行","CBKF"=>"开封市商业银行","WHCCB"=>"威海市商业银行","HBC"=>"湖北银行","BOCD"=>"承德银行","BODD"=>"丹东银行","JHBANK"=>"金华银行","BOCY"=>"朝阳银行","LSBC"=>"临商银行","BSB"=>"包商银行","LZYH"=>"兰州银行","BOZK"=>"周口银行","DZBANK"=>"德州银行","SCCB"=>"三门峡银行","AYCB"=>"安阳银行","ARCU"=>"安徽省农村信用社","HURCB"=>"湖北省农村信用社","HNRCC"=>"湖南省农村信用社","NYNB"=>"广东南粤银行","LYBANK"=>"洛阳银行","NHQS"=>"农信银清算中心","CBBQS"=>"城市商业银行资金清算中心"
    );
    $bc = $bank[$bankCard['bank']];
    if($bc == '') return '卡号不存在 ';
    else return $bc;
}

这个函数就是用来简单的验证下银行卡存不存在,匹配下开户行,要是匹配姓名身份证号那些还是调用三四要素的接口吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值