1. 程式人生 > >卡bin查詢sql分享

卡bin查詢sql分享

mysl 模糊查詢

卡bin:卡號的前6位數字代表發卡行標識代碼,也叫BIN號,不同的BIN號代表了不同的銀行卡組織和卡片級別。


最近更新了系統的卡bin表數據(bank_card_bin),發現卡bin長度並不是前述的6位數字,卡bin長度為8位(有些6位、有些7位,非定長),如下表,


支行行名稱卡名卡類型卡bin卡bin長度長度組織碼
烏拉特中旗蒙銀村鎮銀行烏拉特中旗蒙銀村鎮銀行蒙銀借記卡借記卡6213460781915142075
磴口蒙銀村鎮銀行磴口蒙銀村鎮銀行蒙銀借記卡借記卡6213462681915142073
鄂托克前旗蒙銀村鎮銀行鄂托克前旗蒙銀村鎮銀行蒙銀借記卡借記卡6213462481915142054
鄂爾多斯市鐵西蒙銀村鎮銀行鄂爾多斯市鐵西蒙銀村鎮銀行蒙銀借記卡借記卡6213461181915142051
四子王蒙銀村鎮銀行四子王蒙銀村鎮銀行蒙銀借記卡借記卡6213461381915142046


那麽如何根據銀行卡號查詢具體的卡信息呢?

最開始的想法是截圖卡號前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是唯一”的特性,不存在包含關系,即不存在以下的記錄,

***銀行**銀行蒙銀借記卡借記卡6213466191514204


卡bin查詢sql分享