一、銀行卡號(hào)正則校驗(yàn)
銀行卡號(hào)是我們?nèi)粘I钪薪?jīng)常接觸到的一個(gè)數(shù)字串,如何驗(yàn)證銀行卡號(hào)的正確性呢?通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)正則校驗(yàn)是最直接有效的方法之一。下面是一段實(shí)現(xiàn)銀行卡號(hào)正則校驗(yàn)的JavaScript代碼。
/** * 校驗(yàn)銀行卡號(hào) * @param {string} cardNo 銀行卡號(hào) * @returns {boolean} true為合法,false為不合法 */ function validateCardNo(cardNo) { // 銀行卡號(hào)正則表達(dá)式 var reg = /^([1-9]{1})(\d{15}|\d{18})$/; return reg.test(cardNo); }
該正則表達(dá)式中,^表示匹配字符串的開(kāi)始,([1-9]{1})表示第一位必須是非零數(shù)字,(\d{15}|\d{18})表示后面可以是15位或者18位數(shù)字,$表示匹配字符串的結(jié)束。如果傳入的銀行卡號(hào)符合該正則表達(dá)式,則會(huì)返回true,否則返回false。
二、銀行卡卡號(hào)正確格式
雖然銀行卡號(hào)的長(zhǎng)度可以是15位或18位,但是不同銀行的銀行卡號(hào)格式可能會(huì)有所不同。下面列舉幾家銀行的銀行卡號(hào)格式。
中國(guó)工商銀行(ICBC)的銀行卡號(hào)格式為:6222XXXXXXXXXXXXXX或6282XXXXXXXXXXXXXXX。
中國(guó)農(nóng)業(yè)銀行(ABC)的銀行卡號(hào)格式為:6228XXXXXXXXXXXXXX。
中國(guó)銀行(BOC)的銀行卡號(hào)格式為:6227XXXXXXXXXXXX或9558XXXXXXXXXXXXXXX。
建設(shè)銀行(CCB)的銀行卡號(hào)格式為:6227XXXXXXXXXXXX或6217XXXXXXXXXXXX。
三、銀行卡號(hào)正則表達(dá)式
銀行卡號(hào)的正則表達(dá)式不是唯一的,我們還可以根據(jù)需要自定義正則表達(dá)式。下面是一個(gè)常用的銀行卡號(hào)正則表達(dá)式。
// 銀行卡號(hào)正則表達(dá)式 /^([1-9]{1})(\d{14}|\d{18})$/
該正則表達(dá)式與前面提到的正則表達(dá)式的區(qū)別在于([\d]{14}|[\d]{18})變成了(\d{14}|\d{18}),把中括號(hào)變成了小括號(hào)。
四、銀行卡號(hào)正則驗(yàn)證
驗(yàn)證銀行卡號(hào)是否符合正則表達(dá)式的方法有很多,可以使用JavaScript中的正則表達(dá)式對(duì)象的test方法,也可以使用字符串的match方法。下面是使用match方法的示例代碼。
/** * 驗(yàn)證銀行卡號(hào)是否符合正則表達(dá)式 * @param {string} cardNo 銀行卡號(hào) * @returns {boolean} true為符合,false為不符合 */ function matchCardNo(cardNo) { // 銀行卡號(hào)正則表達(dá)式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/; return cardNo.match(reg) !== null; }
五、銀行卡號(hào)正則匹配
如果需要從一段文本中提取出符合正則表達(dá)式的銀行卡號(hào),可以使用正則表達(dá)式的exec方法。下面是一個(gè)從文本中提取銀行卡號(hào)的示例代碼。
/** * 從文本中提取銀行卡號(hào) * @param {string} text 文本 * @returns {Array} 匹配到的銀行卡號(hào)數(shù)組 */ function extractCardNo(text) { // 銀行卡號(hào)正則表達(dá)式 var reg = /([1-9])(\d{14}|\d{17})/g; var result = []; var temp = null; while((temp = reg.exec(text)) !== null) { result.push(temp[0]); } return result; }
六、銀行卡號(hào)正常是多少位
銀行卡號(hào)的長(zhǎng)度可以是15位或18位,如果卡號(hào)長(zhǎng)度不足,會(huì)補(bǔ)齊至15位或18位。不同銀行的卡號(hào)長(zhǎng)度可能不同,可以通過(guò)對(duì)照前面提到的銀行卡號(hào)格式得知,但是一般情況下銀行卡號(hào)長(zhǎng)度都是16位。
七、銀行卡號(hào)正則表達(dá)式驗(yàn)證
為了方便用戶輸入,我們可以在輸入框中實(shí)時(shí)驗(yàn)證用戶輸入的銀行卡號(hào)是否符合正則表達(dá)式。下面是一個(gè)實(shí)現(xiàn)銀行卡號(hào)正則表達(dá)式驗(yàn)證的示例代碼。
/** * 銀行卡號(hào)正則表達(dá)式驗(yàn)證 * @param {string} cardNo 銀行卡號(hào) * @param {function} callback 回調(diào)函數(shù),驗(yàn)證結(jié)果通過(guò)參數(shù)true/false返回 */ function validateCardNoByReg(cardNo, callback) { // 銀行卡號(hào)正則表達(dá)式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/; callback(reg.test(cardNo)); }
八、銀行卡號(hào)規(guī)則
中國(guó)銀行卡行業(yè)標(biāo)準(zhǔn)規(guī)定,銀行卡號(hào)是由發(fā)卡行、歸屬地區(qū)、分行代碼、個(gè)人賬戶四部分組成,具體規(guī)律如下:
銀行卡號(hào)第1~6位為發(fā)卡行標(biāo)識(shí)代碼,中國(guó)人民銀行分配發(fā)行。中國(guó)工商銀行的發(fā)卡行標(biāo)識(shí)代碼為:ICBC(6222、6282開(kāi)頭的卡號(hào))。
銀行卡號(hào)第7~9位為歸屬地區(qū)標(biāo)識(shí)代碼,具體對(duì)應(yīng)關(guān)系如下:
銀行卡號(hào)前6位 | 歸屬地區(qū)標(biāo)識(shí)代碼 | 城市/省份 |
---|---|---|
6222 | 10 | 北京市 |
6282 | 10 | 北京市 |
6231 | 11 | 天津市 |
6202 | 13 | 上海市 |
6221 | 18 | 河北省 |
6223 | 18 | 河北省 |
銀行卡號(hào)第10~12位為分行標(biāo)識(shí)代碼,由銀行自行分配,且一般只有直轄市和省會(huì)城市的銀行分行代碼比較多,其余城市銀行分行代碼較少。銀行卡號(hào)第13~19位為個(gè)人賬戶標(biāo)識(shí)代碼。個(gè)人賬戶標(biāo)識(shí)代碼一般由發(fā)卡行自行決定,所以不同的銀行卡號(hào)個(gè)人賬戶標(biāo)識(shí)代碼也可能不同。
九、正則匹配銀行卡號(hào)
正則匹配銀行卡號(hào)是非常常見(jiàn)的需求,可以使用JavaScript的正則表達(dá)式對(duì)象的exec方法來(lái)實(shí)現(xiàn)。下面是一個(gè)正則匹配銀行卡號(hào)的示例代碼。
/** * 正則匹配銀行卡號(hào) * @param {string} text 文本 * @returns {Array} 匹配到的銀行卡號(hào)數(shù)組 */ function matchCardNo(text) { // 銀行卡號(hào)正則表達(dá)式 var reg = /^([1-9]{1})(\d{14}|\d{18})$/g; var result = []; var temp = null; while((temp = reg.exec(text)) !== null) { result.push(temp[0]); } return result; }
十、正則表達(dá)式匹配銀行卡號(hào)
和正則匹配銀行卡號(hào)類似,也可以使用正則表達(dá)式來(lái)匹配銀行卡號(hào)。下面是一個(gè)正則表達(dá)式匹配銀行卡號(hào)的示例代碼。
var text = '我的銀行卡號(hào)是622202xxxxxxxxxxxxx,你的銀行卡號(hào)是62222222222222222。'; // 銀行卡號(hào)正則表達(dá)式 var reg = new RegExp('\d{16,19}', 'g'); var cardNoArr = text.match(reg); console.log(cardNoArr); // ["622202xxxxxxxxxxxxx", "62222222222222222"]
該示例代碼使用正則表達(dá)式的RegExp函數(shù)來(lái)構(gòu)造一個(gè)表達(dá)式對(duì)象,這里正則表達(dá)式的意思是匹配16位到19位的數(shù)字串(\d表示數(shù)字字符,{16,19}表示出現(xiàn)次數(shù)在16和19之間)。然后使用字符串的match方法來(lái)匹配文本中的銀行卡號(hào)。