校验码

身份证号码算法

落爺英雄遲暮 提交于 2019-12-11 18:04:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 18身份证号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。 1、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。 2、出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 3、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 4、校验码计算步骤 (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, … , 16 ,先对前 17 位数字的权求和 Ai:表示第i位置上的身份证号码数字值(0~9) Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第 i 位置上的加权因子) (2)计算模 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 根据17位数字本体码获取最后一位校验码程序实例 public class Id18 { int[]

jquery 校验 身份证号码

江枫思渺然 提交于 2019-12-11 18:03:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 大陆18位身份证(第二代身份证) 身份号码是一组具有特征组合码,由十七位数字本体码和一位校验码组成。 排列顺序从左至右依次为:六位数字地区码,八位数字生日码,三位数字顺序码和一位数字校验码。 校验方法: (1)先对前17位数字的权求和 S = Sum(Ci * Vi), i = 0, ... , 16 Ci:表示身份证号码上第i位置的数字值 Vi:表示第i位置上的“加权因子” 加权因子Vi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模(固定算法) Y = mod(S, 11) (3)将计算模Y与对应的校验码校验 Y: 0 1 2 3 4 5 6 7 8 9 10 (通过Y取得对应校验码与身份证的第18位校验) 校验码: 1 0 X 9 8 7 6 5 4 3 2 function (value){ var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子 var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码 if(/^\d{17}\d|x$/i.test(value)){ var sum = 0, idx; for(var

用Python计算身份证校验码

我怕爱的太早我们不能终老 提交于 2019-12-11 17:56:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原来的天朝良民证是15位,构成如下: 1~6位:地址码。采用的是行政区划代码,可以去 统计局的网站 查。 7~12位:生日期码。构成为yymmdd。 13~15位:顺序码。每个地区出生人口按顺序递增,最后一位奇数分给男的,偶数分给女的。 18位则有2点改动: 1.生日期码变为8位,构成为yyyymmdd。 2.增加校验码,即第18位。按照ISO 7064:1983.MOD 11-2校验码计算。 计算方法很无聊: 将身份证号码的前17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 将这17位数字和系数相乘的结果相加。 用加出来和除以11,得到余数。 余数的结果只可能为0 1 2 3 4 5 6 7 8 9 10这11种,分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。 弄懂这个后,很快就能写出Python的计算程序了: s = "34052419800101001" #这个是要查的身份证号码的 前17 位 #计算总和 sum = int (s [0 ]) * 7 + int (s [1 ]) * 9 + int (s [2 ]) * 10 + int (s [3 ]) * 5 + int (s [4 ])

简单理解海明校验码

戏子无情 提交于 2019-12-11 10:36:41
转自: http://baijiahao.baidu.com/s?id=1598006039749022275&wfr=spider&for=pc 二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验位。我们常使用的检验码有三种. 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。 海明校验码是由RichardHamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。但是因为这种海明校验的方法 只能检测和纠正一位出错 的情况。所以如果有多个错误,就不能查出了。 什么是码距? 两个码组对应位上数值不同的个数称为码组的距离,简称码距,又称海明(Hamming)距离。例如: 码值1 00110 12345 Caus 码值2 00100 13344 Daun 码距 1 2 2 海明校验码公式(假设为k个数据位设置r个校验位): 2^r - 1 ≥ k + r 公式怎么得出来的呢

RAID(独立磁盘冗余阵列)

拈花ヽ惹草 提交于 2019-12-05 09:05:53
Raid ​ RAID 独立磁盘冗余阵列,在本科学习时候学习过,记不清是组成原理还是操作系统,当时理解的不太清楚,现在研究生期间做存储相关项目,涉及到了Raid,于是查各种博客,为了以后便于后期查阅,写下这篇博客。 1. Raid的背景 ​ 在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制。另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失。因此大家就在想,有没有一种办法将多块独立的磁盘结合在一起组成一个技术方案,来提高数据的可靠性和I/O性能呢。 ​ 在这种情况下,RAID技术就应运而生了。 2. Raid是什么 RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。 3. Raid有哪些 RAID方案常见的可以分为: RAID0 RAID1 RAID5 RAID6 RAID10 3.1 RAID0 RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。 RAID0

数据校验码概述

匿名 (未验证) 提交于 2019-12-03 00:38:01
[TOC] 最简单实用的一种校验数据的方式。在原始数据的后面加一个校验位来实现数据的校对。 若原始数据为: \(D=(D_1,D_2...D_n)?\) 偶校验:$D_偶 = D_1 \bigoplus D_2 \bigoplus...D_n $ 奇校验: \(D_奇 = \overline{ D_1 \bigoplus D_2 \bigoplus...D_n }\) 验算时: \(F = \overline{D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_奇}\) \(F = D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_ż\) 如果 \(F\) 的值为 0 ,则传输正确,否则错误 奇偶校验码只能检查一位错,并且无法纠错 若一共有 k 个数据位,则需要 r个检验位来完成一位纠错,两位检错。 $ 2^{r-1} \geq k + r$ 新生成的数据为 k+r位,其中每个校验位放在 2的幂次方的位置上 其值为原始数据位在新的排列后,其位次的二进制中有对应位的数的异或和 最后一个校验位的值是前面所有位的异或和,其作用是判断是一位错还是两位错 当接收方接收数据后。先看最后一位,若是1则代表一位错。具体位置由各个位置的海明码组成的二进制表示。 若是0,则若是其他位校验码都是0表示传输正确

编写一个程序,完成从键盘输入一个17位的身份证号,(即身份证的前17位),计算补充最后一位数字校验码并将完整的18位身份证号显示出来

匿名 (未验证) 提交于 2019-12-03 00:26:01
;根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定 ;公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 ;排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 ;顺序码的奇数分给男性,偶数分给女性。 ;校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。 ;关于计算方法自行百度 ;编写一个程序,完成从键盘输入一个17位的身份证号,(即身份证的前17位),计算补充最后一位数字校验码 ;并将完整的18位身份证号显示出来 DATA SEGMENT BUFFER DB 18,?,18 DUP(0) Wi DB 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 CHECKC DB 1,0,'X',9,8,7,6,5,4,3,2 C DB ? S DW ? CRLF DB 0AH,0DH,'$' DATA ENDS STACK SEGMENT PARA STACK DW 128 DUP(?) TOP LABEL WORD STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX MOV AX

使用Python随机生成身份证号码及校验

匿名 (未验证) 提交于 2019-12-02 22:11:45
GitHub : https://github.com/jayknoxqu/id-number-util 身份组成方式 中华人民共和国国家标准 GB 11643-1999《公民身份号码》 中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。 18位数字组合的方式是: 1 1 0 1 0 2 Y Y Y Y M M D D 8 8 8 X 区域码(6位) 出生日期码(8位) 顺序码(2位) 性别码(1位) 校验码(1位) 行政区划代码 ,如110102是北京市-西城区。但港澳台地区居民的身份号码只精确到省级。 最后一位是校验码,这里采用的是ISO 7064:1983,MOD 11-2校验码系统。校验码为一位数,但如果最后采用校验码系统计算的校验码是“10”,碍于身份证号码为18位的规定,则以“X”代替校验码“10”。 校验码计算方法 , 所以: i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 使用 Python 获取身份证校验码: def get_check_digit(id_number): """ 通过身份证号获取校验码 """ check_sum = 0 for i in range(0, 17): check_sum += ((1

计算机科学基础知识

。_饼干妹妹 提交于 2019-12-02 21:59:21
1. 计算机科学基础知识   1.1 数制及其转换     二进制、八进制、十进制和十六进制等常用数制及其相互转换   1.2 计算机内数据的表示     数的表示(原码、反码、补码、移码表示,整数和实数的表示,精度和溢出)      原码表示法 :最高位是符号位。数值X的原码记为[X] 原 ,如果机器字长为n(即采用n个二进制位表示数据),则原码表示:     [+0] 原 =0 0000000  [-0] 原 =1 0000000     [+1] 原 =0 0000001  [-1] 原 =1 0000001     [+127] 原 =0 1111111  [-127] 原 =1 1111111     [+0.5] 原 =0 .1000000  [-0.5] 原 =1 .1000000      反码表示法 :数值X的反码记为[X] 反 ,如果机器字长为n,则原码表示:正数的反码表示同原码,负数的反码表示将正数原码表示中的01反过来。      补码表示法 :负数的补码表示将正数原码表示中的01反过来再+1。0有唯一补码,全为0。     [+0.5] 补 =0 .1000000  [-0.5] 补 =1 .1000000     [+1] 补 =0 0000001  [-1] 补 =1 1111111      在 计算机系统中常采用补码来表示和运算数据

自己编写的Java获取CRC16校验码

匿名 (未验证) 提交于 2019-12-02 21:45:52
/** * CRC16校验码获取 * @author Xjt */ public class CRCUtils { public static String getCRC(String str){ String[] str1 = str.split(" "); int n = 0; for(int i=0;i<str1.length;i++){ n ^= Integer.parseInt(str1[i],16); } String n16 = ""; while(n != 0) { int i = n % 16; n16 = to16(i) + n16; n = n / 16; } return n16; } /** * HEX转换 * @param i * @return */ private static char to16(int i) { if(i <= 9 && i >= 0) return (char)(i + '0'); else return (char)(i - 10 + 'A'); } }