公民身份号码校验码算法(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及其付费用户全部,本篇仅仅从兴趣出发,研究其注冊码生成算法. 不会释出不论什么完整的源码. 网上查了下.已有注冊机,所以 ...
随机推荐
- Incentivizing exploration in reinforcement learning with deep predictive models
Stadie, Bradly C., Sergey Levine, and Pieter Abbeel. "Incentivizing exploration in reinforcemen ...
- C++ 判断
C++ 判断判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). #include <iostream> /* ru ...
- Java集合类相关面试题
1.Collection和Collections的差别 java.util.Collection 是一个集合接口,Collection接口在Java类库中有非常多详细的实现.比如List.Set ja ...
- linux cp 复制文件夹
复制文件夹需要添加 -r 或 -R 参数(recursive: 递归的:循环的) 如 cp -r DIR_A DIR_B; 同理,rm 也一样. 如 rm -r DIR_B
- sql 一些题目
这道SQL笔试题你会怎么写(转) 最近面试了一些Senior BI的候选人,行业经验三年到七年不等,起初觉得这个Level的无需准备笔试题,碍于领导执念,就在真实项目中提取5道SQL题目,这里仅单说其 ...
- UVa 10450 - World Cup Noise
题目:构造一个01串,使得当中的1不相邻,问长度为n的串有多少中. 分析:数学,递推数列. 设长度为n的串有n个.则有递推关系:f(n)= f(n-1)+ f(n-2): 长度为n的结束可能是0或者1 ...
- mybatis由浅入深day02_4多对多查询_多对多查询总结
4 多对多查询 4.1 需求(查询用户及用户购买商品信息) 查询用户及用户购买商品信息. 4.2 sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关 ...
- LinkedBlockingQueue(lbq)阻塞队列
最近开发中,经常使用这个类LinkedBlockingQueue,它是BlockingQueue这个子类. 并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列.该类主要提供 ...
- 说说FATFS文件系统(转)
FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块.FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开.因此,它独立(不依赖)于硬件 ...
- C++中的抽象基类示例
抽象基类(abstract base class,ABC)例子:圆与椭圆.建立一个基类BaseEllipse,建立它的恋歌继承了Ellipse和Circle.ellipse.h #ifndef ELL ...