请问身份证号码的正则表达式怎么写?

CMIC 2002-12-28 12:24:49
1.请问身份证号码的正则表达式怎么写?
2.网上什么地方有关于正则表达式的文章?
...全文
1763 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TonyDaiShui 2002-12-28
  • 打赏
  • 举报
回复
先限定输入只能输入数字
然后限定长度就行了.
一般验证要求的没有那么严格
我认为最多你再从它的个人信息的出生年月日那里截取一下和身份证的对应位置值比较一下,最后再比较一下性别.就应该可以了.
Lostinet 2002-12-28
  • 打赏
  • 举报
回复
这段脚本有用啊。
经常上那些网站要身份证验证的。搞到我连注册都麻烦。
现在用这个脚本生成一个身份好了。。
qiushuiwuhen 2002-12-28
  • 打赏
  • 举报
回复
上面[\dx]已经包含了最后一位是x的情况了

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


<script>
var aCity=[];
aCity[11]="北京"
aCity[12]="天津"
aCity[13]="河北"
aCity[14]="山西"
aCity[15]="内蒙古"
aCity[21]="辽宁"
aCity[22]="吉林"
aCity[23]="黑龙江"
aCity[31]="上海"
aCity[32]="江苏"
aCity[33]="浙江"
aCity[34]="安徽"
aCity[35]="福建"
aCity[36]="江西"
aCity[37]="山东"
aCity[41]="河南"
aCity[42]="湖北"
aCity[43]="湖南"
aCity[44]="广东"
aCity[45]="广西"
aCity[46]="海南"
aCity[50]="重庆"
aCity[51]="四川"
aCity[52]="贵州"
aCity[53]="云南"
aCity[54]="西藏"
aCity[61]="陕西"
aCity[62]="甘肃"
aCity[63]="青海"
aCity[64]="宁夏"
aCity[65]="新疆"
aCity[71]="台湾"
aCity[81]="香港"
aCity[82]="澳门"
aCity[91]="国外"

function cidInfo(sId){
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
if(!checkDate(sBirthday))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法证号";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
function checkDate(str){
var d=new Date(str.replace(/-/g,"/"))
document.write(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate());
return str==(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate());
}

document.write(cidInfo("380524198002300016"));
document.write(cidInfo("340524198002300019"))
document.write(cidInfo("340524197711111111"))
document.write(cidInfo("34052419800101001x"));

function trans15to18(sId){
var cTable = new Array('1','0','x','9','8','7','6','5','4','3','2')
var iSum = 0

if (15 == sId.length){
sId = sId.substr(0,6) + 19 + sId.substr(6) + "0"
}

if(18 != sId.length){
return ""
}

for(var i = 17;i > 0;i --){
iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),10)
}
return sId.substr(0,sId.length - 1) + cTable[iSum % 11]

}

document.write(trans15to18("340524800101001"));
document.write(trans15to18("340524800230001"));
</script>
atao7996 2002-12-28
  • 打赏
  • 举报
回复
身份证的最后一位是经过计算过的校验码,其算法还不得而知,主要是校验码的核对,存在问题。
Lostinet 2002-12-28
  • 打赏
  • 举报
回复
我的身份整最后一位就是X的。.有的银行还不认..
plife 2002-12-28
  • 打赏
  • 举报
回复
Dugu_Niu 2002-12-28
  • 打赏
  • 举报
回复
现在的身份证有两种呀,一种的号码是15位,一种是18位。
这如何做呢?
qiushuiwuhen 2002-12-28
  • 打赏
  • 举报
回复
^(\d{15}|\d{17}[\dx])$
qiushuiwuhen 2002-12-28
  • 打赏
  • 举报
回复
^\d{15}|\d{17}[\dx]$

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧