JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx

上传人:b****8 文档编号:30417107 上传时间:2023-08-14 格式:DOCX 页数:10 大小:18.51KB
下载 相关 举报
JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx_第1页
第1页 / 共10页
JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx_第2页
第2页 / 共10页
JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx_第3页
第3页 / 共10页
JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx_第4页
第4页 / 共10页
JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx

《JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx》由会员分享,可在线阅读,更多相关《JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx(10页珍藏版)》请在冰豆网上搜索。

JavaScript正则表达式验证身份证号码是否合法两种方法讲解.docx

JavaScript正则表达式验证身份证号码是否合法两种方法讲解

JavaScript正则表达式验证身份证号码是否合法(两种方法)

正则表达式(regularexpression)是一个描述字符模式的对象。

下面通过本篇文章给大家介绍js正则表达式验证身份证号码是否合法,需要的朋友可以参考下本篇文章

第一种方法:

在用户注册页面有些需求要求的比较严格,需要对身份证js验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。

下面就此实现方法给大家讲解下。

  很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?

下面来说说一个身份证号里面包含了多少的信息:

  1、号码的结构

    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

排列顺序从左至右依次为:

六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

  2、地址码(前六位数)

    表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按gb/T2260的规定执行。

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

    表示编码对象出生的年、月、日,按gb/T7408的规定执行,年、月、日代码之间不用分隔符。

  4、顺序码(第十五位至十七位)

    表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

  5、校验码(第十八位数)

    作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。

X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

  在知道身份证号结构组成各部分的意思后,我们开始进入主题:

  1、定义一个全国地区的对象

varaCity={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:

"宁夏",65:

"新疆",71:

"台湾",81:

"香港",82:

"澳门",91:

"国外"}

  2、正则表达式判断

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

functionisCardID(sId){

 variSum=0;

 varinfo="";

 if(!

/^\d{17}(\d|x)$/i.test(sId))return"你输入的身份证长度或格式错误";

 sId=sId.replace(/x$/i,"a");

 if(aCity[parseInt(sId.substr(0,2))]==null)return"你的身份证地区非法";

 sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));

 vard=newDate(sBirthday.replace(/-/g,"/"));

 if(sBirthday!

=(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()))return"身份证上的出生日期非法";

 for(vari=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?

"男":

"女");//此次还可以判断出输入的身份证号的人性别

 returntrue;

}

第二种方法:

?

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

functionscCard(){ 

 varscType=ById("sc_card_type").value; 

 if(scType=="1"){ 

  varscCard=ById("sc_card_num").value; 

      if(scCard.length!

=0){ 

      if(!

checkCard(scCard)){ 

      $("#errorTips").html("身份证号码格式错误"); 

      }else{ 

      $("#errorTips").html(""); 

      } 

      } 

 } 

 returnfalse; 

 } 

 //functioncheckidno(obj){ 

  varvcity={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:

"宁夏",65:

"新疆",71:

"台湾",81:

"香港",82:

"澳门",91:

"国外" 

   }; 

 checkCard=function(obj) 

 { 

  //varcard=document.getElementById('card_no').value; 

  //是否为空 

  //if(card==='') 

  //{ 

  // returnfalse; 

  //} 

  //校验长度,类型 

  if(isCardNo(obj)===false) 

  { 

   returnfalse; 

  } 

  //检查省份 

  if(checkProvince(obj)===false) 

  { 

   returnfalse; 

  } 

  //校验生日 

  if(checkBirthday(obj)===false) 

  { 

   returnfalse; 

  } 

  //检验位的检测 

  if(checkParity(obj)===false) 

  { 

   returnfalse; 

  } 

  returntrue; 

 }; 

 //检查号码是否符合规范,包括长度,类型 

 isCardNo=function(obj) 

 { 

  //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 

  varreg=/(^\d{15}$)|(^\d{17}(\d|X)$)/; 

  if(reg.test(obj)===false) 

  { 

   returnfalse; 

  } 

  returntrue; 

 }; 

 //取身份证前两位,校验省份 

 checkProvince=function(obj) 

 { 

  varprovince=obj.substr(0,2); 

  if(vcity[province]==undefined) 

  { 

   returnfalse; 

  } 

  returntrue; 

 }; 

 //检查生日是否正确 

 checkBirthday=function(obj) 

 { 

  varlen=obj.length; 

  //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 

  if(len=='15') 

  { 

   varre_fifteen=/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/; 

   vararr_data=obj.match(re_fifteen); 

   varyear=arr_data[2]; 

   varmonth=arr_data[3]; 

   varday=arr_data[4]; 

   varbirthday=newDate('19'+year+'/'+month+'/'+day); 

   returnverifyBirthday('19'+year,month,day,birthday); 

  } 

  //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X 

  if(len=='18') 

  { 

   varre_eighteen=/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/; 

   vararr_data=obj.match(re_eighteen); 

   varyear=arr_data[2]; 

   varmonth=arr_data[3]; 

   varday=arr_data[4]; 

   varbirthday=newDate(year+'/'+month+'/'+day); 

   returnverifyBirthday(year,month,day,birthday); 

  } 

  returnfalse; 

 }; 

 //校验日期 

 verifyBirthday=function(year,month,day,birthday) 

 { 

  varnow=newDate(); 

  varnow_year=now.getFullYear(); 

  //年月日是否合理 

  if(birthday.getFullYear()==year&&(birthday.getMonth()+1)==month&&birthday.getDate()==day) 

  { 

   //判断年份的范围(3岁到100岁之间) 

   vartime=now_year-year; 

   if(time>=0&&time<=130) 

   { 

    returntrue; 

   } 

   returnfalse; 

  } 

  returnfalse; 

 }; 

 //校验位的检测 

 checkParity=function(obj) 

 { 

  //15位转18位 

  obj=changeFivteenToEighteen(obj); 

  varlen=obj.length; 

  if(len=='18') 

  { 

   vararrInt=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); 

   vararrCh=newArray('1','0','X','9','8','7','6','5','4','3','2'); 

   varcardTemp=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)) 

   { 

    returntrue; 

   } 

   returnfalse; 

  } 

  returnfalse; 

 }; 

 //15位转18位身份证号 

 changeFivteenToEighteen=function(obj) 

 { 

  if(obj.length=='15') 

  { 

   vararrInt=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); 

   vararrCh=newArray('1','0','X','9','8','7','6','5','4','3','2'); 

   varcardTemp=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]; 

   returnobj; 

  } 

  returnobj; 

 };

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1