卡bin:卡號的前6位數(shù)字代表發(fā)卡行標(biāo)識代碼,也叫BIN號,不同的BIN號代表了不同的銀行卡組織和卡片級別。
最近更新了系統(tǒng)的卡bin表數(shù)據(jù)(bank_card_bin),發(fā)現(xiàn)卡bin長度并不是前述的6位數(shù)字,卡bin長度為8位(有些6位、有些7位,非定長),如下表,
支行 | 行名稱 | 卡名 | 卡類型 | 卡bin | 卡bin長度 | 長度 | 組織碼 |
烏拉特中旗蒙銀村鎮(zhèn)銀行 | 烏拉特中旗蒙銀村鎮(zhèn)銀行 | 蒙銀借記卡 | 借記卡 | 62134607 | 8 | 19 | 15142075 |
磴口蒙銀村鎮(zhèn)銀行 | 磴口蒙銀村鎮(zhèn)銀行 | 蒙銀借記卡 | 借記卡 | 62134626 | 8 | 19 | 15142073 |
鄂托克前旗蒙銀村鎮(zhèn)銀行 | 鄂托克前旗蒙銀村鎮(zhèn)銀行 | 蒙銀借記卡 | 借記卡 | 62134624 | 8 | 19 | 15142054 |
鄂爾多斯市鐵西蒙銀村鎮(zhèn)銀行 | 鄂爾多斯市鐵西蒙銀村鎮(zhèn)銀行 | 蒙銀借記卡 | 借記卡 | 62134611 | 8 | 19 | 15142051 |
四子王蒙銀村鎮(zhèn)銀行 | 四子王蒙銀村鎮(zhèn)銀行 | 蒙銀借記卡 | 借記卡 | 62134613 | 8 | 19 | 15142046 |
那么如何根據(jù)銀行卡號查詢具體的卡信息呢?
最開始的想法是截圖卡號前6位,并限制卡長度進(jìn)行查詢,若返回結(jié)果不是只有一條則繼續(xù)截取前7位進(jìn)行查詢,直到只有一條返回結(jié)果。若有2條及以上結(jié)果時(shí),繼續(xù)查詢卻有0條記錄,則認(rèn)為未收錄該卡bin數(shù)據(jù)。即遞歸查詢。假設(shè)卡號為6213462465616156,參考sql如下
select * from bank_card_bin where '6213462465616156' like '621346%' and 長度 = '19'
但是,這太麻煩了,怎么可能呢?在同事溝通確認(rèn),可以做些變更,如下
select * from bank_card_bin where '6213462465616156' like concat(卡bin,'%') and 長度 = '19'
巧妙地將前一個(gè)sql拆成了兩段,且卡bin不是由用戶自己判斷截取的,是做匹配。
同時(shí),此sql利用了“卡bin是唯一”的特性,不存在包含關(guān)系,即不存在以下的記錄,
***銀行 | **銀行 | 蒙銀借記卡 | 借記卡 | 621346 | 6 | 19 | 1514204 |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。