正则表达式判断18位身份证,该怎么处理

如题所述

如果只是简单判断 r = /^(\d{18}|\d{17}x)$/;(只需要判断18位数字活着17位数字+一位x)

如果想写的复杂点,就需要根据身份证上每一位数字的含义去写对应的规则。比如生日那部分。只能是生日区间的数字。

如果判断的准确无误,去找公安局或者其他官方的对外验证真伪的接口。

小伙子,我看你骨骼惊奇,是万年难遇的练武奇才,我这里有一本30分钟速成神功宝典。有兴趣就拿去


温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-18

处理方法:

如果只是简单判断 r = /^(\d{18}|\d{17}x)$/,只需要判断18位数字活着17位数字+一位x。

1、介绍:

xxxxxx yyyy MM dd 375 0     十八位

xxxxxx    yy MM dd   75 0     十五位

2、地区: [1-9]\d{5}

3、年的前两位: (18|19|([23]\d)) 

4、年的后两位: \d{2}

5、月份: ((0[1-9])|(10|11|12)) 

6、天数: (([0-2][1-9])|10|20|30|31)

7、三位顺序码: \d{3}

8、两位顺序码: \d{2}

9、校验码: [0-9Xx]

本回答被网友采纳
第2个回答  2018-04-19
想用一个非常简短的正则表达式来验证身份证的可以歇歇了,因为需要判断的条件太多。就中间日期的判断就不可能用那种印象中超短的正则表达式来写。
本来想找个现成的,结果没有一个令人满意的,大多写出来的效果基本上也就是证明了是一个18位的数字并且最后一位可以是X。
这样敷衍的东西完全满足不了一个万劫不复的强迫症患者。于是我自己写了一个,虽然不算好,但是和现其他身份证的正则相比正确率绝对不在一个等级。
因为太长估计你看了也不一定还会用。但发布出来是我的事情。因为我正在进化的强迫症!
本身份证正则表达式仅可以验证1900年——2099年二代身份证,并且单条无法验证平年和闰年。因为不太喜欢\d所以里面全部使用了[0-9]
闰年:
regex1=/^([1][1-5]|[2][1-3]|[3][1-7]|[4][1-6]|[5][0-4]|[6][1-5])([1-6][0-9]|[7][0])([0,1][0-8]|[2-9][0-9])(([1][9]|[2][0])[0-9]{2})(((([0][1,3,5,7,8]|[1][0,2])([0][1-9]|[1-2][0-9]|[3][0-1])))|(([0][2]([0][1-9]|[1][0-9]|[2][0-9])))|((([0][4,6,9]|[1][1])([0][1-9]|[1-2][0-9]|[3][0]))))([0-9]{3}([0-9]|X|x))$/;
平年:
regex2=/^([1][1-5]|[2][1-3]|[3][1-7]|[4][1-6]|[5][0-4]|[6][1-5])([1-6][0-9]|[7][0])([0,1][0-8]|[2-9][0-9])(([1][9]|[2][0])[0-9]{2})(((([0][1,3,5,7,8]|[1][0,2])([0][1-9]|[1-2][0-9]|[3][0-1])))|(([0][2]([0][1-9]|[1][0-9]|[2][0-8])))|((([0][4,6,9]|[1][1])([0][1-9]|[1-2][0-9]|[3][0]))))([0-9]{3}([0-9]|X|x))$/;
相似回答