卡bin查詢sql分享
阿新 • • 發佈:2018-01-02
mysl 模糊查詢 卡bin:卡號的前6位數字代表發卡行標識代碼,也叫BIN號,不同的BIN號代表了不同的銀行卡組織和卡片級別。
最近更新了系統的卡bin表數據(bank_card_bin),發現卡bin長度並不是前述的6位數字,卡bin長度為8位(有些6位、有些7位,非定長),如下表,
支行 | 行名稱 | 卡名 | 卡類型 | 卡bin | 卡bin長度 | 長度 | 組織碼 |
烏拉特中旗蒙銀村鎮銀行 | 烏拉特中旗蒙銀村鎮銀行 | 蒙銀借記卡 | 借記卡 | 62134607 | 8 | 19 | 15142075 |
磴口蒙銀村鎮銀行 | 磴口蒙銀村鎮銀行 | 蒙銀借記卡 | 借記卡 | 62134626 | 8 | 19 | 15142073 |
鄂托克前旗蒙銀村鎮銀行 | 鄂托克前旗蒙銀村鎮銀行 | 蒙銀借記卡 | 借記卡 | 62134624 | 8 | 19 | 15142054 |
鄂爾多斯市鐵西蒙銀村鎮銀行 | 鄂爾多斯市鐵西蒙銀村鎮銀行 | 蒙銀借記卡 | 借記卡 | 62134611 | 8 | 19 | 15142051 |
四子王蒙銀村鎮銀行 | 四子王蒙銀村鎮銀行 | 蒙銀借記卡 | 借記卡 | 62134613 | 8 | 19 | 15142046 |
那麽如何根據銀行卡號查詢具體的卡信息呢?
最開始的想法是截圖卡號前6位,並限制卡長度進行查詢,若返回結果不是只有一條則繼續截取前7位進行查詢,直到只有一條返回結果。若有2條及以上結果時,繼續查詢卻有0條記錄,則認為未收錄該卡bin數據。即遞歸查詢。假設卡號為6213462465616156,參考sql如下
select * from bank_card_bin where '6213462465616156' like '621346%' and 長度 = '19'
但是,這太麻煩了,怎麽可能呢?在同事溝通確認,可以做些變更,如下
select * from bank_card_bin where '6213462465616156' like concat(卡bin,'%') and 長度 = '19'
巧妙地將前一個sql拆成了兩段,且卡bin不是由用戶自己判斷截取的,是做匹配。
同時,此sql利用了“卡bin是唯一”的特性,不存在包含關系,即不存在以下的記錄,
***銀行 | **銀行 | 蒙銀借記卡 | 借記卡 | 621346 | 6 | 19 | 1514204 |
卡bin查詢sql分享