場景
之前做添加大陸銀行卡時有接入過第三方的銀行卡三要素認證方法(三要素:姓名、身份證號、銀行卡號),這可以校驗用戶綁定的銀行卡是否是與證件號一致的卡。但在此之前,還需要做一個卡bin校驗,以便區分銀行卡的性質,比如是儲蓄卡還是信用卡、是哪個銀行的卡, 不巧的是第三方沒有提供卡bin方法,所以直接用支付寶免費的卡bin校驗方法。
<?php
/**
*
*
* User: 原子醬
* Date: 2019/9/17
* Time: 14:27
*/
use GuzzleHttp\Client;
require_once '../vendor/autoload.php';
// 銀行卡號前綴
$head = [
// '625810',
'620302',
'622840',
'621215',
'622700',
'622258',
'622615',
'622909',
'622660',
'622989',
'621771',
'621030',
'622580',
'690755',
'62215049',
'622500',
'622630',
];
$host = 'https://ccdcapi.alipay.com/validateAndCacheCardInfo.json';
$client = new Client();
$content = [];
foreach ($head as $value) {
$lenth = 16;
do {
$bankNo = str_pad($value, $lenth, 0, STR_PAD_RIGHT);
$getUrl = $host . "?cardBinCheck=true&cardNo=$bankNo";
$response = $client->request('GET', $getUrl);
$response = $response->getBody()->getContents();
$result = json_decode(trim(strval($response)), true);
$lenth++;
} while (!isset($result['bank']) || $lenth > 20);
$content[] = [
'head' => $value,
'abbr' => $result['bank'],
'lenth' => $lenth,
];
}
var_dump($content);
以上方法是爲了得出常用銀行簡稱對應關係,因爲大部分銀行卡號都有自己的規律,且爲了用戶信息安全起見,在調用卡bin校驗接口時不需要把卡號傳過去,補0也是可以得出結果。我在項目中是直接截掉10位再補0的:
substr_replace($bankNo, ‘0000000000’, -10)
接口調用時間大概是0.1s~0.2s之間,還是比較快的。
銀行名稱 | 各銀行開頭 | 卡bin接口返回的銀行簡稱 |
---|---|---|
工商銀行 | 620302 | ICBC |
農業銀行 | 622840 | ABC |
中國銀行 | 621215 | BOC |
建設銀行 | 622700 | CCB |
交通銀行 | 622258 | COMM |
民生銀行 | 622615 | CMBC |
興業銀行 | 622909 | CIB |
光大銀行 | 622660 | CEB |
平安銀行 | 622989 | SPABANK |
中信銀行 | 621771 | CITIC |
北京銀行 | 621030 | BJBANK |
廣發銀行 | 622580 | GDB |
招商銀行 | 690755 | CMB |
郵儲銀行 | 62215049 | PSBC |
浦發銀行 | 622500 | SPDB |
華夏銀行 | 622630 | HXBANK |