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身份证的同志正确理解这个数字的含义,
* 查验身份证的机关和单位更应该清楚这一点。 */

附: GB11714-1997全国组织机构代码编制规则

公民身份号码校验码算法(C#版)的更多相关文章

  1. 各种条码的校验码算法(EAN13,COD128,GTIN,UCC等)

    校验码是由编码方案决定的,所以在代码中是否使用校验码和条码基本无关,但商品条码除外.今天给大家介绍几种校验码的计算方法. 一.商品条码: 商品条码中需要计算校验码的有:EAN-8(8位),EAN-13 ...

  2. 国民身份证号码校验之“C#/Winform方法实现+案例分析”

    根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...

  3. 身份证最后一位按照ISO7064:1983.MOD11-2校验码

    居民身份证号码,根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地 ...

  4. Android MD5校验码的生成与算法实现

    在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...

  5. PHP CRC16 校验码的算法怎么使用

    PHP CRC16 校验码的算法如何使用最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 0103 ...

  6. MOD 10,11算法(GB/T 17710-1999 数据处理 校验码系统 ),使用javascript实现

    原文链接:http://chunniu.info/p/74.html GB/T 17710-1999 数据处理 校验码系统 ,便于使用,使用javascript做了一个页面 [php] var NUM ...

  7. 【转】身份证号码校验与信息提取 - Java 代码

    转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148 import java.util.regex.*;   /**   ...

  8. 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位 ...

  9. CLion注冊码算法逆向分析实录(纯研究)

    声明 CLion程序版权为jetBrains全部.注冊码授权为jetBrains及其付费用户全部,本篇仅仅从兴趣出发,研究其注冊码生成算法. 不会释出不论什么完整的源码. 网上查了下.已有注冊机,所以 ...

随机推荐

  1. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  2. vector push_back报错

    场景:定义了一个结构体,包含一个vector的成员变量,在给这个vTQ push_back数据的时候报错. typedef struct tag_TQInfo { int iTime; int iMa ...

  3. 以下哪个Hibernate主键生成策略是实现主键按数值顺序递增的?

    A.increment B.identity C.sequence D.native 解答:A

  4. SSL双向认证Java实现 Tomcat篇

    双向验证,在客户机连接服务器时,客户机验证服务器的证书,服务器验证客户机的证书,链接双方都要对彼此的数字证书进行验证,保证这是经过授权的才能够连接. 1. 生成服务器端的keystore和trusts ...

  5. hbase shell学习-2

    一个学生成绩表的例子来演示hbase的用法. name grade course math english Tom 5 97 87 Jim 4 89 80 表的创建:语法:create '表名称',' ...

  6. jQuery弹出遮罩层效果完整示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 【java】 java 设计模式概述

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  8. Credential

    https://www.cnblogs.com/Hawk-Hong/p/4293651.html 在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑以下问题: ...

  9. Python 流程控制:for

    for 循环用于对一个序列进行遍历,用法如下: In [4]: for i in 'abcd': ...: print(i) ...: a b c d In [13]: for i in range( ...

  10. help()

    help() 用于查看函数或模块的帮助信息 In [1]: help(id) # 查看id()这个函数的帮助信息,注意不要写成help(id()) id(...) id(object) -> i ...