作者:王家威
鏈接:https://zhuanlan.zhihu.com/p/27289413
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
互聯網金融產品的綁卡操作是核心功能,怎么根據用戶提供的銀行卡號來識別開戶行和銀行卡種類?如何識別用戶銀行卡信息的有效性,本文將通過分析銀行卡號的編碼規則來告訴大家一、銀行卡格式
銀行卡的格式如:xxxxxx xxxx x xxxxxxx x
我國銀行卡的長度一般在13-19位,銀聯標準卡長度一般是16-19位。其中信用卡的長度為16位,借記卡的長度為19位。
銀行卡號一般有五部分組成:發卡機構標識代碼(BIN)、地區代碼、卡種類碼、順序碼、校驗碼。
1.發卡行標識碼(BIN)
卡號左起前6位是發卡機構標識代碼(BIN),一般由6位數字組成。發卡行標識代碼Bank Identification Number(BIN),又叫發卡機構標識代碼Issuer Identification Numbers(IIN),是由國際標注組織(ISO)制定和非配的。目前銀聯標準卡易62開頭,各銀行再向銀聯申請,如621226、622848開頭的分別為工商銀行和農行的借記卡。
另外,銀聯卡不都是以62開頭,主要有2種情況。第一種是雙組織卡,如銀聯、運通雙組織卡,一般以信用卡居多,如招行與運通合作的運通卡。另外一種即早期以9開頭的銀行卡,這些卡都是國內自行分配的,僅限國內使用,無法與國際進行接軌。以下為部分常見卡組織發行的銀行卡起始數字:
通過卡BIN能獲得該卡的開戶行、種類、卡號長度、卡名稱等信息,是進行銀行卡有效性驗證的關鍵信息。根據數據庫存儲的BIN數據與用戶輸入的卡號的BIN信息進行匹配,就可以判斷銀行卡的發卡行、種類等,數據庫存儲的BIN數據越完善,判斷越準確。目前支付寶、微信等大部分支付平臺都是用這個方法進行判斷的。以下為部分卡BIN:
2.地區代碼
第7-10位代表發卡地區,用于識別城市和網點
3.卡種類代碼
第11位表示卡種類碼
4.順序碼
第12-18位代碼是順序碼,是發卡行編制的,可以理解為銀行卡的編碼順序
5.校驗碼
銀行卡號最后一位是校驗碼,采用LUNH算法,也稱為模10算法計算得出。
二、校驗碼算法(LUNH算法)
第一步:從銀行卡號本位碼(不含校驗碼)的最后一位開始,將奇數位乘以2相加
第二步:將第一步計算的結果與卡號中未乘2的各位數字相加
第三步:將10減去第二步計算結果的個位數,即個位數求10的補數;若個位數為0則檢驗碼為0.
例如:
某銀行卡本位碼是: 622326321600570645
第一步:2*2+3*2+6*2+2*2+6*2+0*2+7*2 + 6*2+5*2=74
第二步:74+6+2+2+3+1+0+5+0+4=97
第三步:10-7=3
因此,該銀行卡的校驗碼是3,完整的銀行卡號是:6223263216005706453
三、編碼格式的應用
1.根據銀行卡編碼格式,判斷用戶所輸銀行卡號的有效性,如不符合銀行卡編碼格式則可能出現輸入錯誤或胡亂輸入的場景,則進行友好提示;
2.根據BIN碼判斷用戶輸入的銀行卡號與所選擇的開戶行,以及卡種類,是不是信用卡等;
3.根據銀行卡編碼規則及卡BIN規則,平臺自行搭建一套卡BIN讀取系統及相應數據,響應速度更快,同時會節省一大筆接口調用費用(每次接口調用費用大概2-4元,根據用戶量可以節省幾十上百萬的費用)。
在綁卡之前通常需要進行實名認證,就涉及到我上一篇文章:金融支付:身份證號碼的編碼規則大家可以查看這篇文章,便于更好的理解銀行卡號的編碼規則及其應用。
作者簡介:本人為互聯網金融公司產品經理一枚,先后負責了公司第三方支付資金存管系統對接和銀行資金存管系統的對接。接下來我將更新【金融支付】系列文章,分享自己的項目經歷,希望能給大家帶來價值。
歡迎關注我的個人公眾號:威理(ID:weili201608) 交流互聯網金融支付產品設計