Skip to content

【BUG】身份证工具-IdcardUtil.IsValid() 校验始终不通过 #57

@xushuangchao

Description

@xushuangchao

问题描述及重现代码:

IsValid() 方法校验始终不通过,15位和18位均有此类问题
15位和18为在区域校验均存在问题
且 获取生日信息、替换生日、替换性别、随机生成身份证号码 都无法正常使用。(生成随机身份证会导致堆栈溢出使程序崩溃退出,因为始终无法校验通过)

// c# code
// 验证身份证号码是否合法
var idcard = "110101200510284511";
// var idcard = "511121820301053";
var isValid = IdcardUtil.IsValid(idcard);
Console.WriteLine("身份证号码 {0} 是否合法:{1}", idcard, isValid);

// 获取身份证号码的生日信息
var birthday = IdcardUtil.GetBirthday(idcard);
Console.WriteLine("身份证号码 {0} 的生日为 {1}", idcard, birthday?.ToString("yyyy年MM月dd日"));

// 获取身份证号码的性别信息
var gender = IdcardUtil.GetGender(idcard);
Console.WriteLine("身份证号码 {0} 的性别为 {1}", idcard, gender == IdcardUtil.Gender.Male ? "男" : "女");

// 将身份证号码中的生日部分替换成指定的日期,并返回新的身份证号码
var newBirthday = new DateTime(1992, 4, 15);
var newIdcard1 = IdcardUtil.ReplaceBirthday(idcard, newBirthday);
Console.WriteLine("将身份证号码 {0} 中的生日部分替换成 {1},得到新的身份证号码 {2}", idcard, newBirthday.ToString("yyyyMMdd"), newIdcard1);

// 将身份证号码中的性别部分替换成指定的性别,并返回新的身份证号码
var newGender = IdcardUtil.Gender.Female;
var newIdcard2 = IdcardUtil.ReplaceGender(idcard, newGender);
Console.WriteLine("将身份证号码 {0} 中的性别部分替换成 {1},得到新的身份证号码 {2}", idcard, newGender == IdcardUtil.Gender.Male ? "男" : "女", newIdcard2);

// 生成一个随机的身份证号码
var randomIdcard = IdcardUtil.GenerateRandomIdcard();
Console.WriteLine("随机生成一个身份证号码:{0}", randomIdcard);

具体版本

2023.914.2 ~ 2023.917.1-pre-231010054442

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions