公民身份号码校验码算法(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[]{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#版)相关推荐
- 公民身份号码 校验码 检证程序
公民身份号码 校验码 检证程序 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- 公民身份号码 校验码 检证程序
公民身份号码 校验码 检证程序 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- 【商业信息】GB 11643—1999 公民身份号码
前 言 本标准是GB 11643-1989<社会保障号码>的修订版.为了使标准的内容适应我国国民经济和社会发展的需要,对原标准内容作了以下改动: 原标准名称"社会保障号 ...
- oracle验证公民身份号码
首先看一下<公民身份号码>中做了明确的规定: 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11 ...
- Java身份证号码严格验证(第18位校验码算法实现)
/*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...
- 【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)
文章内容:二代身份证号码的组成结构(含校验码算法与行政区划代码) 关键词组:身份证号码.组成.校验码.行政区划码 使用软件:无 虚拟环境:无 操作系统:Windows 11 文章目录 一.身份证号码划 ...
- 中国公民身份证号码校验
中国公民身份证号码校验 上图可看出18位位身份证每一部分表示的意义. 图为随机生成身份号码,四川省 乐山市 井研县 1981年12月28日生 这里主要讲解最后一位校验码的验证 校验码主要是由前面17位 ...
- java imei_JAVA 实现 IMEI校验码算法
IMEI校验码算法: (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和 (2).将奇数位数字相加,再加上上一步算得的值 (3).如果得出的数个位是0则校验位为0,否则为10减去个位数 如:3 ...
- 公民身份号码是一种由18位数字组成的特征组合码,其排列顺序从左至右依次为:6位数字地址码、8位数字出生日期码,3位数字顺序码和1位数字校验码(校验码若为10则用字符X来表示)。编写程序从键盘输入一个
#include <stdio.h> int main() {int add,year,month,day;/*定义地址码,年月日*/int shunxuma;/*定义顺序码*/char ...
最新文章
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。...
- Web生产:外部JS文件中的绝对URL?
- linux 创建crontab文件位置,linux - 如何通过脚本创建crontab - Ubuntu问答
- Python OpenCV——函数 cv2.findContours 运行错误【in function ‘cv::pointSetBoundingRect‘】解决方案
- vue里碰到 $refs 的问题
- SFB 项目经验-14-为某客户用Exchange 2016 UM作为总机的问题
- java netty socket_Java-彻底弄懂netty-原来netty是这样启动的-知识铺
- [转]Java并发编程:线程池的使用
- c语言数字和字母排序,C# 数字和字母的混合排序
- 优秀的程序员是如何处理技术 Bug 的?
- 多线程之join用法
- BZOJ 5277 IQ题orz
- 关于C#使用DataContractJsonSerializer来进行JSON解析
- windows下载安装ElasticSearch
- 记一个印象深刻的项目
- Eclipse背景颜色修改
- Arduino的详细介绍(基于Mega2560)
- 逐行拆解Guava限流器RateLimiter
- excel 中 宏的使用
- Arduino版RFID门锁
热门文章
- 联想rd640服务器装系统,RD640操作系统安装手册.pdf
- 触发器的Sd和Rd的作用(转)
- 数据库中用户登录注册用户信息表怎么设计如何设计
- 技嘉显卡性能测试软件,理论性能测试_技嘉 AORUS GTX 1070 Gaming Box_显卡评测-中关村在线...
- 【解题报告】【】交谊舞
- Promise静态方法,then的顺延,resolve函数
- Mac OS 修改默认复制、粘贴等快捷键
- linux su 不能输密码错误,su - root正确输入密码但是登录不了系统,报错su: Permission denied...
- linux下kil命令l,linux/centos下使用kill命令的使用教程方法
- 计算机应用基础教程 rar,计算机应用基础教程全套1000p精选整理.ppt