您的位置:

银行卡号正则表达式详解

一、银行卡号正则校验

银行卡号是我们日常生活中经常接触到的一个数字串,如何验证银行卡号的正确性呢?通过正则表达式来实现正则校验是最直接有效的方法之一。下面是一段实现银行卡号正则校验的JavaScript代码。

/**
 * 校验银行卡号
 * @param {string} cardNo 银行卡号
 * @returns {boolean} true为合法,false为不合法
 */
function validateCardNo(cardNo) {
  // 银行卡号正则表达式
  var reg = /^([1-9]{1})(\d{15}|\d{18})$/;
  return reg.test(cardNo);
}

该正则表达式中,^表示匹配字符串的开始,([1-9]{1})表示第一位必须是非零数字,(\d{15}|\d{18})表示后面可以是15位或者18位数字,$表示匹配字符串的结束。如果传入的银行卡号符合该正则表达式,则会返回true,否则返回false。

二、银行卡卡号正确格式

虽然银行卡号的长度可以是15位或18位,但是不同银行的银行卡号格式可能会有所不同。下面列举几家银行的银行卡号格式。

中国工商银行(ICBC)的银行卡号格式为:6222XXXXXXXXXXXXXX或6282XXXXXXXXXXXXXXX。

中国农业银行(ABC)的银行卡号格式为:6228XXXXXXXXXXXXXX。

中国银行(BOC)的银行卡号格式为:6227XXXXXXXXXXXX或9558XXXXXXXXXXXXXXX。

建设银行(CCB)的银行卡号格式为:6227XXXXXXXXXXXX或6217XXXXXXXXXXXX。

三、银行卡号正则表达式

银行卡号的正则表达式不是唯一的,我们还可以根据需要自定义正则表达式。下面是一个常用的银行卡号正则表达式。

// 银行卡号正则表达式
/^([1-9]{1})(\d{14}|\d{18})$/

该正则表达式与前面提到的正则表达式的区别在于([\d]{14}|[\d]{18})变成了(\d{14}|\d{18}),把中括号变成了小括号。

四、银行卡号正则验证

验证银行卡号是否符合正则表达式的方法有很多,可以使用JavaScript中的正则表达式对象的test方法,也可以使用字符串的match方法。下面是使用match方法的示例代码。

/**
 * 验证银行卡号是否符合正则表达式
 * @param {string} cardNo 银行卡号
 * @returns {boolean} true为符合,false为不符合
 */
function matchCardNo(cardNo) {
  // 银行卡号正则表达式
  var reg = /^([1-9]{1})(\d{14}|\d{18})$/;
  return cardNo.match(reg) !== null;
}

五、银行卡号正则匹配

如果需要从一段文本中提取出符合正则表达式的银行卡号,可以使用正则表达式的exec方法。下面是一个从文本中提取银行卡号的示例代码。

/**
 * 从文本中提取银行卡号
 * @param {string} text 文本
 * @returns {Array} 匹配到的银行卡号数组
 */
function extractCardNo(text) {
  // 银行卡号正则表达式
  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;
}

六、银行卡号正常是多少位

银行卡号的长度可以是15位或18位,如果卡号长度不足,会补齐至15位或18位。不同银行的卡号长度可能不同,可以通过对照前面提到的银行卡号格式得知,但是一般情况下银行卡号长度都是16位。

七、银行卡号正则表达式验证

为了方便用户输入,我们可以在输入框中实时验证用户输入的银行卡号是否符合正则表达式。下面是一个实现银行卡号正则表达式验证的示例代码。

/**
 * 银行卡号正则表达式验证
 * @param {string} cardNo 银行卡号
 * @param {function} callback 回调函数,验证结果通过参数true/false返回
 */
function validateCardNoByReg(cardNo, callback) {
  // 银行卡号正则表达式
  var reg = /^([1-9]{1})(\d{14}|\d{18})$/;
  callback(reg.test(cardNo));
}

八、银行卡号规则

中国银行卡行业标准规定,银行卡号是由发卡行、归属地区、分行代码、个人账户四部分组成,具体规律如下:

银行卡号第1~6位为发卡行标识代码,中国人民银行分配发行。中国工商银行的发卡行标识代码为:ICBC(6222、6282开头的卡号)。

银行卡号第7~9位为归属地区标识代码,具体对应关系如下:

银行卡号前6位 归属地区标识代码 城市/省份
6222 10 北京市
6282 10 北京市
6231 11 天津市
6202 13 上海市
6221 18 河北省
6223 18 河北省

银行卡号第10~12位为分行标识代码,由银行自行分配,且一般只有直辖市和省会城市的银行分行代码比较多,其余城市银行分行代码较少。银行卡号第13~19位为个人账户标识代码。个人账户标识代码一般由发卡行自行决定,所以不同的银行卡号个人账户标识代码也可能不同。

九、正则匹配银行卡号

正则匹配银行卡号是非常常见的需求,可以使用JavaScript的正则表达式对象的exec方法来实现。下面是一个正则匹配银行卡号的示例代码。

/**
 * 正则匹配银行卡号
 * @param {string} text 文本
 * @returns {Array} 匹配到的银行卡号数组
 */
function matchCardNo(text) {
  // 银行卡号正则表达式
  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;
}

十、正则表达式匹配银行卡号

和正则匹配银行卡号类似,也可以使用正则表达式来匹配银行卡号。下面是一个正则表达式匹配银行卡号的示例代码。

var text = '我的银行卡号是622202xxxxxxxxxxxxx,你的银行卡号是62222222222222222。';
// 银行卡号正则表达式
var reg = new RegExp('\d{16,19}', 'g');
var cardNoArr = text.match(reg);
console.log(cardNoArr); // ["622202xxxxxxxxxxxxx", "62222222222222222"]

该示例代码使用正则表达式的RegExp函数来构造一个表达式对象,这里正则表达式的意思是匹配16位到19位的数字串(\d表示数字字符,{16,19}表示出现次数在16和19之间)。然后使用字符串的match方法来匹配文本中的银行卡号。