不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
身份证号码格式说明及校验码生成方法
编辑:dnawo 日期:2011-11-04
一、身份证号码格式说明
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#相关代码
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();
}
}
}
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 | 引用: 0 | 查看次数: 10210
发表评论
请登录后再发表评论!