公民身份号码校验码算法(C#版)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace org_checker
{
/// <summary>
/// 公民身份号码 校验码 检证程序
/// vp:hsg
/// create date:2013-09-13 1:19
/// </summary>
public class sfzhmClass
{
public void test()
{
string y_bm = "51302119781010543-4";
//
Console.WriteLine(y_bm);
string bm = this.Getsfzh_checkbm(y_bm);
Console.WriteLine(bm);
Console.ReadLine();
}
public string Getsfzh_checkbm(string str_in)
{
string rbc="";
int[] wi=new int[]{,,,,,,,,,,,,,,,,};
char c;
int S=, z=;
for (int i =; i <; i++)
{
c = char.Parse(str_in.Substring(i, ));
if (c >= 'A' && c <= 'Z') //A-Z字符
{
z = ((int)c - ) * wi[i];
}
else if (c >= '' && c <= '') //0-9字符
{
z = int.Parse(c.ToString()) * wi[i];
}
else
{
rbc = "Err不能输入其他字符错误码";
return rbc;
}
S += z;
}
int Y=S %;
string g_c="";
//校验码
//根据模的值得到对应的校验码
//对应关系为:
//Y值: 0 1 2 3 4 5 6 7 8 9 10
//校验码: 1 0 X 9 8 7 6 5 4 3 2
string xym="1,0,X,9,8,7,6,5,4,3,2";
string[] CArray=xym.Split(new char[]{','});
g_c=CArray[Y]; //获取校验码
rbc=str_in.Substring(,)+"-"+g_c;
return rbc;
}
}
}
/*
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,
三位数字顺序码和一位校验码。其含义如下: 1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,
年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,
顺序码的奇数分配给男性,偶数分配给女性。
校验的计算方式: 1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,
其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 2. 以11对计算结果取模
Y = mod(S, 11) 3. 根据模的值得到对应的校验码
对应关系为:
Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2 关于18位身份证号码尾数是“X”的解释 居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,
* 第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验码。
* 作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,
* 如果某人的尾号是0-9,都不会出现X,但如果尾号是10,
* 那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,
* 而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。
* Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
* 但是我国的居民身份证在升位后,一些人的尾号变成了X,这部分人在工作生活中,
* 例如去银行存取钱、去汽车公司租赁汽车或者报名参加考试等等过程中,
* 往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。
* 公安局的同志希望领到X身份证的同志正确理解这个数字的含义,
* 查验身份证的机关和单位更应该清楚这一点。 */
公民身份号码校验码算法(C#版)的更多相关文章
- 各种条码的校验码算法(EAN13,COD128,GTIN,UCC等)
校验码是由编码方案决定的,所以在代码中是否使用校验码和条码基本无关,但商品条码除外.今天给大家介绍几种校验码的计算方法. 一.商品条码: 商品条码中需要计算校验码的有:EAN-8(8位),EAN-13 ...
- 国民身份证号码校验之“C#/Winform方法实现+案例分析”
根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...
- 身份证最后一位按照ISO7064:1983.MOD11-2校验码
居民身份证号码,根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地 ...
- Android MD5校验码的生成与算法实现
在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...
- PHP CRC16 校验码的算法怎么使用
PHP CRC16 校验码的算法如何使用最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 0103 ...
- MOD 10,11算法(GB/T 17710-1999 数据处理 校验码系统 ),使用javascript实现
原文链接:http://chunniu.info/p/74.html GB/T 17710-1999 数据处理 校验码系统 ,便于使用,使用javascript做了一个页面 [php] var NUM ...
- 【转】身份证号码校验与信息提取 - Java 代码
转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148 import java.util.regex.*; /** ...
- ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-18位)
/* 假设某一17位数字是 17位数字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 计算17位 ...
- CLion注冊码算法逆向分析实录(纯研究)
声明 CLion程序版权为jetBrains全部.注冊码授权为jetBrains及其付费用户全部,本篇仅仅从兴趣出发,研究其注冊码生成算法. 不会释出不论什么完整的源码. 网上查了下.已有注冊机,所以 ...
随机推荐
- 【转】C# URL短地址压缩算法及短网址原理解析
这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaur ...
- 使用C#压缩解压rar和zip格式文件
为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...
- ChemDraw 16最新版本发布 更效率科研的首选
ChemDraw一直是全球领先的科学绘图软件,致力于为科学家.教师以及学生提供最新的智能应用程序.ChemDraw 16版本相较于15版本做出了较大的改进,大大缩短科研时间,提高科研效率.扩展Name ...
- 使用mshflxgd.ocx控件
msflxgrd.ocx - Microsoft FlexGrid Control 原先使用的是msflxgrd控件,但是使用过程中发现,Cell中的中文字符串在英文系统下显示“??”,查找资料发现该 ...
- LazyValue<T>
public void ExtendFuncT() { //():匿名无参方法.() =>方法名,指派匿名无参方法去执行另外一个方法. LazyValue<int> lazyOne ...
- Java精选笔记_DBUtils工具
DBUtils工具 API介绍 为了更加简单地使用JDBC,Apache组织提供了一个工具类库commons-dbutils组件. 该组件实现了对JDBC的简单封装,可以在不影响性能的情况下极大简化J ...
- Python 入门(五)条件判断和循环
if语句 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if age > ...
- Template类的使用指南【python】
转自:http://www.jb51.net/article/55011.htm
- ReactiveCocoa - iOS开发的新框架
本文转载至 http://www.infoq.com/cn/articles/reactivecocoa-ios-new-develop-framework ReactiveCocoa(其简称为RAC ...
- C# Timer自带定时器
官方文档 https://msdn.microsoft.com/zh-cn/library/system.timers.timer.aspx using System; using System.Ti ...