C#中国身份证验证 特别收集一些关于身份证验证的算法C#版

本文提供了一种使用C#实现的中国身份证号码验证算法。该算法能够验证15位和18位身份证号的有效性,并检查身份证号码对应的出生日期是否合理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#中国身份证验证 特别收集一些关于身份证验证的算法C#版

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

 

private bool CheckIDCard_CHS(string IDCard)
{
    
string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
    
string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
    
string[] Checker = ("1,9,8,7,6,5,4,3,2,1,1").Split(',');
    
int intLength = IDCard.Length;

    
int i = 0, TotalmulAiWi = 0;
    
int modValue = 0;
    
string strVerifyCode = "";
    
string Ai = "";
    
string BirthDay = "";
    
int intYear = 0;
    
int intMonth = 0;
    
int intDay = 0;

    
if (intLength != 18)
    {
        
return false;
    }
    
if (intLength == 18)
    {
        Ai 
= IDCard.Substring(017);
    }
    
else if (intLength == 15)
    {
        Ai 
= IDCard;
        Ai 
= Ai.Substring(06+ "19" + Ai.Substring(69);
    }
    
if (!IsNumeric(Ai)) return false;

    intYear 
= Convert.ToInt32(Ai.Substring(64));
    intMonth 
= Convert.ToInt32(Ai.Substring(102));
    intDay 
= Convert.ToInt32(Ai.Substring(122));

    BirthDay 
= intYear.ToString() + "-" + intMonth.ToString() + "-" + intDay.ToString();
    
if (IsDateTime(BirthDay))
    {
        DateTime DateBirthDay 
= DateTime.Parse(BirthDay);
        
if (DateBirthDay > DateTime.Now)
        {
            
return false;
        }

        
int intYearLength = DateBirthDay.Year - DateBirthDay.Year;
        
if (intYearLength < -140)
        {
            
return false;
        }
    }

    
if (intMonth > 12 || intDay > 31)
    {
        
return false;
    }

    
for (i = 0; i < 17; i++)
    {
        TotalmulAiWi 
= TotalmulAiWi + (Convert.ToInt32(Ai.Substring(i, 1)) * Convert.ToInt32(Wi[i].ToString()));
    }
    modValue 
= TotalmulAiWi % 11;

    strVerifyCode 
= arrVarifyCode[modValue].ToString();
    Ai 
= Ai + strVerifyCode;
    
if (intLength == 18 && IDCard != Ai)
    {
        
return false;
    }
    
return true;
}
/// 判断字符串是否可转换为DateTime
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsDateTime(string s)
{
    
try
    {
        System.DateTime.Parse(s);
    }
    
catch
    {
        
return false;
    }
    
return true;
}

/// 判断字符串是否可以转换为数字
/// 
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsNumeric(object value)
{
    
try
    {
        
double i = Convert.ToDouble(value.ToString());
        
return true;
    }
    
catch (FormatException)
    {
        
return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值