一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - 正則表達(dá)式 - JavaScript正則表達(dá)式驗證身份證號碼是否合法(兩種方法)

JavaScript正則表達(dá)式驗證身份證號碼是否合法(兩種方法)

2020-08-15 19:321875328775 正則表達(dá)式

正則表達(dá)式(regular expression)是一個描述字符模式的對象。下面通過本篇文章給大家介紹js正則表達(dá)式驗證身份證號碼是否合法,需要的朋友可以參考下本篇文章

第一種方法:

在用戶注冊頁面有些需求要求的比較嚴(yán)格,需要對身份證js驗證是否合法,通過此功能嚴(yán)格此系統(tǒng)軟件,從而過濾到很多水客。下面就此實(shí)現(xiàn)方法給大家講解下。

  很多時候我們都是通過一組正則表達(dá)式來判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,你對身份證號的組成有多少了解呢?下面來說說一個身份證號里面包含了多少的信息:

  1、號碼的結(jié)構(gòu)

    公民身份號碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗碼。

  2、地址碼(前六位數(shù))

    表示編碼對象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按gb/T2260的規(guī)定執(zhí)行。

  3、出生日期碼(第七位至十四位)

    表示編碼對象出生的年、月、日,按gb/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。

  4、順序碼(第十五位至十七位)

    表示在同一地址碼所標(biāo)識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。

  5、校驗碼(第十八位數(shù))

    作為尾號的校驗碼,是由號碼編制單位按統(tǒng)一的公式計算出來的,如果某人的尾號是0-9,都不會出現(xiàn)X,但如果尾號是10,那么就得用X來代替,因為如果用10做尾號,那么 此人的身份證就變成了19位。X是羅馬數(shù)字的10,用X來代替10,可以保證公民的身份證符合國家標(biāo)準(zhǔn)。

  在知道身份證號結(jié)構(gòu)組成各部分的意思后,我們開始進(jìn)入主題:

  1、定義一個全國地區(qū)的對象

var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",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:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}

  2、正則表達(dá)式判斷

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function isCardID(sId){
 var iSum=0 ;
 var info="" ;
 if(!/^\d{17}(\d|x)$/i.test(sId)) return "你輸入的身份證長度或格式錯誤";
 sId=sId.replace(/x$/i,"a");
 if(aCity[parseInt(sId.substr(0,2))]==null) return "你的身份證地區(qū)非法";
 sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
 var d=new Date(sBirthday.replace(/-/g,"/")) ;
 if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "身份證上的出生日期非法";
 for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
 if(iSum%11!=1) return "你輸入的身份證號非法";
 //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次還可以判斷出輸入的身份證號的人性別
 return true;
}

第二種方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
function scCard(){
 var scType=document.getElementById("sc_card_type").value;
 if(scType=="1"){
  var scCard=document.getElementById("sc_card_num").value;
      if(scCard.length!=0){
      if(!checkCard(scCard)){
      $("#errorTips").html("身份證號碼格式錯誤");
      }else{
      $("#errorTips").html("");
      }
      }
 }
 return false;
 }
 //function checkidno(obj) {
  var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",
    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:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"
   };
 checkCard = function(obj)
 {
  //var card = document.getElementById('card_no').value;
  //是否為空
  // if(card === '')
  // {
  //  return false;
  //}
  //校驗長度,類型
  if(isCardNo(obj) === false)
  {
   return false;
  }
  //檢查省份
  if(checkProvince(obj) === false)
  {
   return false;
  }
  //校驗生日
  if(checkBirthday(obj) === false)
  {
   return false;
  }
  //檢驗位的檢測
  if(checkParity(obj) === false)
  {
   return false;
  }
  return true;
 };
 //檢查號碼是否符合規(guī)范,包括長度,類型
 isCardNo = function(obj)
 {
  //身份證號碼為15位或者18位,15位時全為數(shù)字,18位前17位為數(shù)字,最后一位是校驗位,可能為數(shù)字或字符X
  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
  if(reg.test(obj) === false)
  {
   return false;
  }
  return true;
 };
 //取身份證前兩位,校驗省份
 checkProvince = function(obj)
 {
  var province = obj.substr(0,2);
  if(vcity[province] == undefined)
  {
   return false;
  }
  return true;
 };
 //檢查生日是否正確
 checkBirthday = function(obj)
 {
  var len = obj.length;
  //身份證15位時,次序為省(3位)市(3位)年(2位)月(2位)日(2位)校驗位(3位),皆為數(shù)字
  if(len == '15')
  {
   var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
   var arr_data = obj.match(re_fifteen);
   var year = arr_data[2];
   var month = arr_data[3];
   var day = arr_data[4];
   var birthday = new Date('19'+year+'/'+month+'/'+day);
   return verifyBirthday('19'+year,month,day,birthday);
  }
  //身份證18位時,次序為省(3位)市(3位)年(4位)月(2位)日(2位)校驗位(4位),校驗位末尾可能為X
  if(len == '18')
  {
   var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
   var arr_data = obj.match(re_eighteen);
   var year = arr_data[2];
   var month = arr_data[3];
   var day = arr_data[4];
   var birthday = new Date(year+'/'+month+'/'+day);
   return verifyBirthday(year,month,day,birthday);
  }
  return false;
 };
 //校驗日期
 verifyBirthday = function(year,month,day,birthday)
 {
  var now = new Date();
  var now_year = now.getFullYear();
  //年月日是否合理
  if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
  {
   //判斷年份的范圍(3歲到100歲之間)
   var time = now_year - year;
   if(time >= 0 && time <= 130)
   {
    return true;
   }
   return false;
  }
  return false;
 };
 //校驗位的檢測
 checkParity = function(obj)
 {
  //15位轉(zhuǎn)18位
  obj = changeFivteenToEighteen(obj);
  var len = obj.length;
  if(len == '18')
  {
   var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
   var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
   var cardTemp = 0, i, valnum;
   for(i = 0; i < 17; i ++)
   {
    cardTemp += obj.substr(i, 1) * arrInt[i];
   }
   valnum = arrCh[cardTemp % 11];
   if (valnum == obj.substr(17, 1))
   {
    return true;
   }
   return false;
  }
  return false;
 };
 //15位轉(zhuǎn)18位身份證號
 changeFivteenToEighteen = function(obj)
 {
  if(obj.length == '15')
  {
   var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
   var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
   var cardTemp = 0, i; 
   obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6);
   for(i = 0; i < 17; i ++)
   {
    cardTemp += obj.substr(i, 1) * arrInt[i];
   }
   obj += arrCh[cardTemp % 11];
   return obj;
  }
  return obj;
 };

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99国产精品久久久久久久... | 按摩师他揉我奶好爽捏我奶 | jux539原千岁在线播放 | 波多野结衣一区免费作品 | 欧美日韩国产最新一区二区 | 风间由美一区二区av101 | 9420高清完整版在线观看国语 | 肥胖女性大bbbbbb视频女厕 | 吃大胸寡妇的奶 | 亚洲热在线视频 | 美女扒开胸罩露出奶了无遮挡免费 | 高h全肉动漫在线观看免费 高h辣h双处全是肉军婚 | 成人aqq| 亚洲国产精品综合久久一线 | 激情自拍网 | aa视频免费 | 女人张开腿 让男人桶个爽 免费观看 | 国产第一页无线好源 | 成人私人影院www片免费高清 | 成人福利| 亚洲天堂日韩在线 | 高清色黄毛片一级毛片 | 亚洲天堂视频在线免费观看 | 跪在老师脚下吃丝袜脚 | 18亚洲chinese男男1069 | 国产区成人综合色在线 | 国产视频福利 | fquer老师 | 国产日韩高清一区二区三区 | 欧美日本一区视频免费 | 免费在线观看成年人视频 | 日韩欧美中文字幕一区 | 亚洲男人的天堂网 | 羞羞麻豆国产精品1区2区3区 | 关晓彤被调教出奶水的视频 | 日本免费不卡在线一区二区三区 | 天堂精品高清1区2区3区 | 国产精品香蕉夜间视频免费播放 | 护士柔佳 | 国产精品视频播放 | 女同变态 中文字幕 |