欢迎光临

木子屋

标题: 身份证号码格式说明及校验码生成方法

作者: dnawo

日期: 2011-11-04 09:40 AM

分类: Win编程

内容: 一、身份证号码格式说明
1.旧15位身份证号码格式
01-06位：地址码，表示户口所在地行政区代码。
07-12位：出生日期码，表示出生的年、月、日。
13-15位：顺序码，表示同一地址码同年同月同日出生的人员顺序号，奇数分给男性，偶数分给女性。
2.新18位身份证号码格式
01-06位：地址码，表示户口所在地行政区代码。
07-14位：出生日期码，表示出生的年、月、日。
15-17位：顺序码，表示同一地址码同年同月同日出生的人员顺序号，奇数分给男性，偶数分给女性。
18位：校验码。
说明：第01-17位又称本体码，第18位称校验码。
二、身份证号码15位升级到18位方法
出生年份加个19，末尾加个校验码即可。
三、校验码生成方法
1.前17个数字各乘对应加权因子{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}，第1个数字乘7，第2个数字乘9，依此类推；
2.将所有乘积相加求和；
3.将和除11求余数；
4.根据余数从集合{1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2}中得校验码，余数0则集合第一项为校验码，依此类推；
四、C#相关代码
复制内容到剪贴板 程序代码using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
/// <summary>
/// 生成校验码
/// </summary>
/// <param name="idcard"></param>
/// <returns></returns>
static string CreateCheckcode(string idcard)
{
if (!Regex.IsMatch(idcard, "^\\d+$"))
throw new ArgumentException("参数必须全为数字.");
else if (idcard.Length < 17)
throw new ArgumentException("参数长度必须不应小于17.");
else
{
int[] Wi = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
string[] lastcode = new string[] { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
idcard = idcard.Substring(0, 17);
int sum = 0;
for (int i = 0; i < idcard.Length; i++)
{
sum += int.Parse(idcard[i].ToString()) * Wi[i];
}
return lastcode[sum % 11].ToString();
}
}
/// <summary>
/// 15位升至18位
/// </summary>
/// <param name="idcard"></param>
/// <returns></returns>
static string CreateNewIDCard(string idcard)
{
if (!Regex.IsMatch(idcard, "^\\d{15}$"))
throw new ArgumentException("参数必须全为15位数字.");
else
{
string str = idcard.Substring(0, 6) + "19" + idcard.Substring(6);
return str + CreateCheckcode(str);
}
}
/// <summary>
/// 验证身份证号码
/// </summary>
/// <param name="idcard"></param>
/// <returns></returns>
static bool CheckIDCard(string idcard)
{
if (idcard.Length == 15)
idcard = CreateNewIDCard(idcard);
return CreateCheckcode(idcard) == idcard[idcard.Length - 1].ToString();
}
static void Main(string[] args)
{
string idcard = "350724821114101";
Console.WriteLine("15位号码：{0}", idcard);
Console.WriteLine("18位号码：{0}", CreateNewIDCard(idcard));
Console.WriteLine("格式验证：{0}", CheckIDCard(idcard));
Console.ReadKey();
}
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.055 ms

返回

标题: 身份证号码格式说明及校验码生成方法

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.055 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.102 ms

返回