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[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};char c;int S=0, z=0;for (int i =0; i <17; i++){c = char.Parse(str_in.Substring(i, 1));if (c >= 'A' && c <= 'Z')  //A-Z字符
                {z = ((int)c - 55) * wi[i];}else if (c >= '0' && c <= '9')  //0-9字符
                {z = int.Parse(c.ToString()) * wi[i];}else{rbc = "Err不能输入其他字符错误码";return rbc;}S += z;}int Y=S %11;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 2string 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(0,17)+"-"+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 22. 以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全国组织机构代码编制规则

转载于:https://www.cnblogs.com/kongxiaoshuang/p/6439182.html

公民身份号码校验码算法(C#版)相关推荐

  1. 公民身份号码 校验码 检证程序

    公民身份号码  校验码 检证程序 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  2. 公民身份号码 校验码 检证程序

    公民身份号码  校验码 检证程序 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  3. 【商业信息】GB 11643—1999 公民身份号码

    前      言 本标准是GB 11643-1989<社会保障号码>的修订版.为了使标准的内容适应我国国民经济和社会发展的需要,对原标准内容作了以下改动: 原标准名称"社会保障号 ...

  4. oracle验证公民身份号码

    首先看一下<公民身份号码>中做了明确的规定: 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11 ...

  5. Java身份证号码严格验证(第18位校验码算法实现)

    /*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...

  6. 【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)

    文章内容:二代身份证号码的组成结构(含校验码算法与行政区划代码) 关键词组:身份证号码.组成.校验码.行政区划码 使用软件:无 虚拟环境:无 操作系统:Windows 11 文章目录 一.身份证号码划 ...

  7. 中国公民身份证号码校验

    中国公民身份证号码校验 上图可看出18位位身份证每一部分表示的意义. 图为随机生成身份号码,四川省 乐山市 井研县 1981年12月28日生 这里主要讲解最后一位校验码的验证 校验码主要是由前面17位 ...

  8. java imei_JAVA 实现 IMEI校验码算法

    IMEI校验码算法: (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和 (2).将奇数位数字相加,再加上上一步算得的值 (3).如果得出的数个位是0则校验位为0,否则为10减去个位数 如:3 ...

  9. 公民身份号码是一种由18位数字组成的特征组合码,其排列顺序从左至右依次为:6位数字地址码、8位数字出生日期码,3位数字顺序码和1位数字校验码(校验码若为10则用字符X来表示)。编写程序从键盘输入一个

    #include <stdio.h> int main() {int add,year,month,day;/*定义地址码,年月日*/int shunxuma;/*定义顺序码*/char ...

最新文章

  1. 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。...
  2. Web生产:外部JS文件中的绝对URL?
  3. linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答
  4. Python OpenCV——函数 cv2.findContours 运行错误【in function ‘cv::pointSetBoundingRect‘】解决方案
  5. vue里碰到 $refs 的问题
  6. SFB 项目经验-14-为某客户用Exchange 2016 UM作为总机的问题
  7. java netty socket_Java-彻底弄懂netty-原来netty是这样启动的-知识铺
  8. [转]Java并发编程:线程池的使用
  9. c语言数字和字母排序,C# 数字和字母的混合排序
  10. 优秀的程序员是如何处理技术 Bug 的?
  11. 多线程之join用法
  12. BZOJ 5277 IQ题orz
  13. 关于C#使用DataContractJsonSerializer来进行JSON解析
  14. windows下载安装ElasticSearch
  15. 记一个印象深刻的项目
  16. Eclipse背景颜色修改
  17. Arduino的详细介绍(基于Mega2560)
  18. 逐行拆解Guava限流器RateLimiter
  19. excel 中 宏的使用
  20. Arduino版RFID门锁

热门文章

  1. 联想rd640服务器装系统,RD640操作系统安装手册.pdf
  2. 触发器的Sd和Rd的作用(转)
  3. 数据库中用户登录注册用户信息表怎么设计如何设计
  4. 技嘉显卡性能测试软件,理论性能测试_技嘉 AORUS GTX 1070 Gaming Box_显卡评测-中关村在线...
  5. 【解题报告】【】交谊舞
  6. Promise静态方法,then的顺延,resolve函数
  7. Mac OS 修改默认复制、粘贴等快捷键
  8. linux su 不能输密码错误,su - root正确输入密码但是登录不了系统,报错su: Permission denied...
  9. linux下kil命令l,linux/centos下使用kill命令的使用教程方法
  10. 计算机应用基础教程 rar,计算机应用基础教程全套1000p精选整理.ppt