js验证真实姓名与ID号匹配

电脑杂谈  发布时间:2020-04-10 08:28:45  来源:网络整理

用js验证号码_js 验证号_用js验证号码

实名认证界面在最近的项目中使用. 实名认证接口的价格比SMS高出几美分,因此严格控制调用实名认证的条件,因此使用js验证真实的Name和使用js验证ID号.

输入主题

js使用Unicode字符来匹配真实姓名,中文名称的长度通常为2-4,因此请重复匹配{2,4}次

1.js验证真实姓名

 var regName =/^[\ue-\ufa]{,}$/;
 if(!regName.test(name)){
  alert('真实姓名填写有误');
  return false;
 }

js验证ID号,中文ID号,第一代ID号是15位数字,第二代ID是18位数字,除了最后一位校验位可能是数字还是'X'或'x',所以有四种可能: a.15位数字b.18位数字c.17位数字,第18位数字是'X'd.17位数字,第18位数字是'x'

2.js验证ID号

 var regIdNo = /(^\d{}$)|(^\d{}$)|(^\d{}(\d|X|x)$)/;
 if(!regIdNo.test(idNo)){
  alert('号填写有误');
  return false;
 }

PS: 15位和18位ID卡JS验证示例

首先,号码的结构和表示

1. 数字的结构

根据中华人民共和国国家标准GB11643-1999中关于公民编号的规定,公民编号是功能的组合代码,由17位数字的身体代码和验证码组成. 从左到右的排列顺序是: 六位地址码,八位出生日期码,三位顺序码和一位校验码.

2. 地址代码

指明编码对象永久居所所在县(市,旗,区)的行政区划代码,并应按照GB / T2260的规定执行.

3. 出生日期代码

根据GB / T7408的规定,指示编码对象的出生年月日,并且在年月日代码之间没有分隔符.

4. 序列码

表示在同一地址代码标识的区域内,给同一年用js验证号码,同一月,同一天出生的人分配了序列号,对男性分配了序列号的奇数,而偶数分配了偶数数字分配给女性.

5. 验证码

(1)17位数字本体代码的加权和公式

S =总和(Ai * Wi),i = 0,...,16,首先将前17位数字的权重相加

Ai: 代表第i个位置的ID号的数值

Wi: 表示第i个位置的加权因子

7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模式

Y = mod(S,11)

(3)通过模块获取相应的校验码

Y: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2

也就是说,如果余数为1,则最后一个校验位p应该为对应的0.

15位数字:

a a b b c c y y m m d d x x s

18位数字:

a a b b c c y y y m m d d x x s p

第二,地址代码

的前6位数字是行政区划数字代码的说明(简称“数字代码”)(请参阅“ GB / T 2260-2007中华人民共和国行政区划代码”) ): 数字代码的编写原理和结构分析,使用六层层次结构的代码结构代表每个省(自治区,直辖市,特别行政区),城市(地区,自治州,联盟) ,县(自治县,县级市,国旗,自治旗,市辖区,林区,特区).

(1)第一位和第二位数字: 它所在的省的代码,表示省,自治区,直辖市和特别行政区.

省市代码表: {11: “北京”,12: “天津”,13: “河北”,14: “山西”,15: “内蒙古”,21: “辽宁”,22: “吉林“,23: ”黑龙江“,31: ”上海“,32: ”江苏“,33: ”浙江“,34: ”安徽“,35: ”福建“,36: ”江西“,37: ”山东“ ,41: “河南”,42: “湖北”,43: “湖南”,44: “广东”,45: “广西”,46: “海南”,50: “重庆”,51: “四川”,52 : “贵州”,53: “云南”,54: “西藏”,61: “陕西”,62: “甘肃”,63: “青海”,64: “宁夏”用js验证号码,65: “新疆”,71: “台湾”,“ 81: ”香港”,82: “澳门”,91: “海外”}

(2)第3位和第4位数字: 省级城市(县)的代码,代表城市,地区,自治州,盟,市,县级行政代码和省(自治区)县级行政区划摘要代码.

-01〜20、51〜70代表城市,中央直辖市将代表01个市区,而02将代表中央直辖市所辖的郊区县;

-21〜50表示地区,自治州,联盟;

-90表示省(自治区)县级行政区划的摘要代码.

(3)第5位和第6位数字: 位置级别的县(市)代码,指示县,自治县,县级城市,旗帜,自治旗,市辖区,森林面积和特殊地区区域.

-01〜20是指直辖市,地区(自治州和盟)管辖的县级城市,直辖市辖区和直辖县级行政区划中的县级城市在省(自治区)中,“ 01”通常是指辖区的摘要代码;

-21〜80是指县,自治县,旗帜,自治旗,林区和特别行政区;

-81〜99是指省(自治区)管辖的县级市.

三个,其他

15位ID号:

第7位和第8位数字是出生年份(两位数字,用年份的后两位数字表示),

第9位和第10位是出生月份,

第11位和第12位数字代表出生日期,

第13位和第14位是顺序码,这是一个随机数,

第15位代表性别,奇数为男性,偶数为女性.

18位ID号:

第7、8、9和10位数字是出生年份(四位数字),

第11位和第12位是出生月份,

第13位和第14位数字代表出生日期,

第15位和第16位是顺序代码,

第17位代表性别,奇数是男性,偶数是女性.

最后一位是校验位.

四个Js代码示例

var idCardNoUtil = {
 /*省,直辖市代码表*/
 provinceAndCitys: {:"北京",:"天津",:"河北",:"山西",:"内蒙古",:"辽宁",:"吉林",:"黑龙江",
 :"上海",:"江苏",:"浙江",:"安徽",:"福建",:"江西",:"山东",:"河南",:"湖北",:"湖南",:"广东",
 :"广西",:"海南",:"重庆",:"四川",:"贵州",:"云南",:"西藏",:"陕西",:"甘肃",:"青海",:"宁夏",
 :"新疆",:"台湾",:"香港",:"澳门",:"国外"},
 /*每位加权因子*/
 powers: ["","","","","","","","","","","","","","","","",""],
 /*第位校检码*/
 parityBit: ["","","X","","","","","","","",""],
 /*性别*/
 genders: {male:"男",female:"女"},
 /*校验地址码*/
 checkAddressCode: function(addressCode){
  var check = /^[-]\d{}$/.test(addressCode);
  if(!check) return false;
  if(idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(,))]){
  return true;
  }else{
  return false;
  }
 },
 /*校验日期码*/
 checkBirthDayCode: function(birDayCode){
  var check = /^[-]\d{}(([-])|([-]))(([-])|([-][-])|([-]))$/.test(birDayCode);
  if(!check) return false; 
  var yyyy = parseInt(birDayCode.substring(,),);
  var mm = parseInt(birDayCode.substring(,),);
  var dd = parseInt(birDayCode.substring(),);
 var xdata = new Date(yyyy,mm-,dd);
 if(xdata > new Date()){
  return false;//生日不能大于当前日期
 }else if ( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - ) && ( xdata.getDate() == dd ) ){
  return true;
 }else{
  return false;
 }
 },
 /*计算校检码*/
 getParityBit: function(idCardNo){
 var id = idCardNo.substring(,); 
  /*加权 */
  var power = ;
  for(var i=;i<;i++){
  power += parseInt(id.charAt(i),) * parseInt(idCardNoUtil.powers[i]);
  }    
  /*ȡģ*/ 
  var mod = power % ;
  return idCardNoUtil.parityBit[mod];
 },
 /*验证校检码*/
 checkParityBit: function(idCardNo){
  var parityBit = idCardNo.charAt().toUpperCase();
  if(idCardNoUtil.getParityBit(idCardNo) == parityBit){
   return true;
  }else{
   return false;
  }
 },
 /*校验位或位的号码*/
 checkIdCardNo: function(idCardNo){
 //位和位号码的基本校验
 var check = /^\d{}|(\d{}(\d|x|X))$/.test(idCardNo);
 if(!check) return false;
 //判断长度为位或位 
 if(idCardNo.length==){
  return idCardNoUtil.checkIdCardNo(idCardNo);
 }else if(idCardNo.length==){
  return idCardNoUtil.checkIdCardNo(idCardNo);
 }else{
  return false;
 }
 },
 //校验位的号码
 checkIdCardNo: function(idCardNo){
  //位号码的基本校验
  var check = /^[-]\d{}(([-])|([-]))(([-])|([-][-])|([-]))\d{}$/.test(idCardNo); 
  if(!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(,);
  check = idCardNoUtil.checkAddressCode(addressCode);
  if(!check) return false;
  var birDayCode = '' + idCardNo.substring(,);
  //校验日期码
  return idCardNoUtil.checkBirthDayCode(birDayCode);
 },
 //校验位的号码
 checkIdCardNo: function(idCardNo){
  //位号码的基本格式校验
  var check = /^[-]\d{}[-]\d{}(([-])|([-]))(([-])|([-][-])|([-]))\d{}(\d|x|X)$/.test(idCardNo);
  if(!check) return false;
  //校验地址码
  var addressCode = idCardNo.substring(,);
  check = idCardNoUtil.checkAddressCode(addressCode);
  if(!check) return false;
  //校验日期码
  var birDayCode = idCardNo.substring(,);
  check = idCardNoUtil.checkBirthDayCode(birDayCode);
  if(!check) return false;
  //验证校检码 
  return idCardNoUtil.checkParityBit(idCardNo); 
 },
 formateDateCN: function(day){
  var yyyy =day.substring(,);
  var mm = day.substring(,);
  var dd = day.substring();
  return yyyy + '-' + mm +'-' + dd;
 },
 //获取信息
 getIdCardInfo: function(idCardNo){
  var idCardInfo = {
  gender:"", //性别
  birthday:"" // 出生日期(yyyy-mm-dd)
  };
 if(idCardNo.length==){
  var aday = '' + idCardNo.substring(,);
  idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
  if(parseInt(idCardNo.charAt())%==){
   idCardInfo.gender=idCardNoUtil.genders.female;
  }else{
   idCardInfo.gender=idCardNoUtil.genders.male;
  }  
 }else if(idCardNo.length==){
  var aday = idCardNo.substring(,);
  idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
   if(parseInt(idCardNo.charAt())%==){
   idCardInfo.gender=idCardNoUtil.genders.female;
  }else{
   idCardInfo.gender=idCardNoUtil.genders.male;
  } 
 }
 return idCardInfo;
 },
 /*λתλ*/
 getId: function(idCardNo){
 if(idCardNo.length==){
  return idCardNo;
 }else if(idCardNo.length==){
  return idCardNo.substring(,) + idCardNo.substring(,); 
 }else{
 return null;
 }
 },
 /*λתλ*/
 getId: function(idCardNo){
 if(idCardNo.length==){
  var id = idCardNo.substring(,) + '' + idCardNo.substring();
  var parityBit = idCardNoUtil.getParityBit(id);
  return id + parityBit;
 }else if(idCardNo.length==){
  return idCardNo;
 }else{
 return null;
 }
 }
};
//号码验证 
jQuery.validator.addMethod("idCardNo", function(value, element) { 
 return this.optional(element) || idCardNoUtil.checkIdCardNo(value); 
}, "Please specify a valid ID number."); 
//获取信息 
var idCardInfo = idCardNoUtil.getIdCardInfo(idCardNo); 
alert(idCardInfo.gender + "|" + idCardInfo.birthday); 

注意: 输入和判断中是否已存在相同的ID卡

(1)如果要输入15位ID卡: 首先搜索是否存在15位ID. 如果不存在,则需要将15位ID卡转换为18位ID卡. 进入系统.

(2)如果输入的是18位ID卡: 首先搜索是否存在18位ID卡. 如果不存在,则需要将18位ID卡转换为15位ID卡. 进入系统.

如果找到相应的15位ID卡,则需要将15位更新为18位.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-170403-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...