我是靠谱客的博主 帅气水杯,最近开发中收集的这篇文章主要介绍身份证号码正确性验证,15/18位/校验码验证,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

身份证生成规则,参考链接

function checkID(id){
if(typeof id !== 'string')return {result:false,msg:'请输入字符串'};
if(!/(^d{15}$)|(^d{17}(d|X|x)$)/.test(id))return {result:false,msg:'只能输入15个字符或者18个字符'};
var 加权因子=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var tempArray=id.split('');
if(tempArray.length==15){
tempArray.splice(6,0,"1");
tempArray.splice(7,0,"9");
}
var year=tempArray.slice(6,10).join('')-0;
if(year==0 || year>new Date().getFullYear())return {result:false,msg:'年错误'};
var MM=tempArray.slice(10,12).join('')-0;
if(MM == 0 || MM>12)return {result:false,msg:'月错误'};
var dd=tempArray.slice(12,14).join('')-0;
if(dd == 0 || dd>31)return {result:false,msg:'日错误'};
if (MM == 2)//月份为2月份
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//并且年份为闰年
{
if (dd > 29)//如果天数大于29天 则身份证的格式不正确
{
return {result:false,msg:'闰年日错误'};
}
}
else//如果年份为平年
{
if (dd > 28)//天数大于28天 则身份证的格式不正确
{
return {result:false,msg:'平年日错误'};
}
}
}
var s=0;
for(var i=0,len=加权因子.length;i<len;i++){
s+=tempArray[i]*加权因子[i];
}
var t=s % 11;
var r=(12-t) % 11;
var x=r==10?'X':r+'';
if (tempArray.length == 17) {
return {result:true,msg:'身份证正确'};
}
if(tempArray[17]==x){
return {result:true,msg:'身份证正确'};
}else{
return {result:false,msg:'身份证错误,正确号码应该为:'+tempArray.slice(0,17).join('')+x};
}
}

c#

static bool CheckID(string id)
{
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(^d{15}$)|(^d{17}(d|X|x)$)");
if (!reg.IsMatch(id)) return false;
var tempList = id.ToCharArray().Select(ss => ss.ToString()).ToList();
if (tempList.Count == 15)
{
tempList.InsertRange(6, new List<string>{ "1", "9" });
}
int year = Convert.ToInt16(string.Join("", tempList.Skip(6).Take(4).ToArray()));
if (year == 0 || year > DateTime.Now.Year) return false;
int MM = Convert.ToInt16(string.Join("", tempList.Skip(10).Take(2).ToArray()));
if (MM == 0 || MM > 12) return false;
int dd = Convert.ToInt16(string.Join("", tempList.Skip(12).Take(2).ToArray()));
if (dd == 0 || dd > 31) return false;
#region 二月检查
if (MM == 2)//月份为2月份
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//并且年份为闰年
{
if (dd > 29)//如果天数大于29天 则身份证的格式不正确
{
return false;
}
}
else//如果年份为平年
{
if (dd > 28)//天数大于28天 则身份证的格式不正确
{
return false;
}
}
}
#endregion
var 加权因子 = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
var s = 0;
for (int i = 0, len = 加权因子.Length; i < len; i++)
{
s += Convert.ToInt16(tempList[i]) * 加权因子[i];
}
var t = s % 11;
var r = (12 - t) % 11;
var x = r == 10 ? "X" : r.ToString();
if (tempList.Count == 17) {
return true;
}
return tempList[17].ToUpper() == x;
}
//强行补位版,自动生成一个伪身份证号码
function Random(min,max){return Math.floor(Math.random()*(max-min)+min);}
function checkID(id){
if(typeof id !== 'string')return {result:false,msg:'请输入字符串'};
if(id.length>18){
id=id.subStr(0,18);
}else if(id.length<18){
for(var i=0,len=18-id.length;i<len;i++){
id+=(Random(0,10)+'');
}
}
var 加权因子=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var tempArray=id.split('');
for(var i=0;i<17;i++){
if(isNaN(tempArray[i]))tempArray[i]=Random(0,10);
}
var year=tempArray.slice(6,10).join('')-0;
if(year==0 || year>new Date().getFullYear()){
var temp=Random(1000,new Date().getFullYear()-18)+'';
tempArray[6]=temp[0];
tempArray[7]=temp[1];
tempArray[8]=temp[2];
tempArray[9]=temp[3];
}
var MM=tempArray.slice(10,12).join('')-0;
if(MM == 0 || MM>12){
var temp=Random(1,13);
temp=temp<10?'0'+temp:''+temp;
tempArray[10]=temp[0];
tempArray[11]=temp[1];
}
var dd=tempArray.slice(12,14).join('')-0;
if(dd == 0 || dd>31){
var temp=Random(1,29);
temp=temp<10?'0'+(temp+''):temp+'';
tempArray[12]=temp[0];
tempArray[13]=temp[1];
}
var s=0;
for(var i=0,len=加权因子.length;i<len;i++){
s+=(tempArray[i]-0)*加权因子[i];
}
var t=s % 11;
var r=(12-t) % 11;
var x=r==10?'X':r+'';
if(tempArray[17]==x){
return {result:true,msg:'身份证正确:'+tempArray.join('')};
}else{
return {result:false,msg:'身份证错误,正确号码应该为:'+tempArray.slice(0,17).join('')+x};
}
}

最后

以上就是帅气水杯为你收集整理的身份证号码正确性验证,15/18位/校验码验证的全部内容,希望文章能够帮你解决身份证号码正确性验证,15/18位/校验码验证所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部