校验码

汉明校验码

妖精的绣舞 提交于 2020-03-24 23:54:55
首先放个图,为汉明码中信息位N与校验位K的位数关系: 2^(K-1)>=N+K+1 码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有Hm、Hm-1、Hm-2···H2、H1。 一、 编码规则为: ⑴每个校验位Pi在汉明码中被分到位号2^(i-1)的位置上,其余各位为信息位。 ⑵汉明码的每一位Hi有多个校验位校验,其关系式是 被校验的每一位位号等于校验它的各校验位的位号之和 。 ⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。 二、 校验规则为: ⑴当S5~S1为00000时,表明无错。 ⑵当S5~S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该Si对应的Pi位。 ⑶当S5~S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。 ⑷当S5~S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5~ S1 的4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位

有关一道身份证的python编程题

橙三吉。 提交于 2020-03-17 00:38:13
有关一道身份证的题目,要求python解决 就昨天晚上嗷一个妹纸问我这样一道问题哈: 问题: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2 现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。 输入格式: 输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。 输出格式: 按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。 原题位置 出于撩妹的需要(手动狗头)我昨天晚上写了一下结果十行就有九行的BUG我。。。 于是乎我今天接着搞,总算是把它giao了出来哈哈 这里我的代码比较辣鸡哈哈大伙可能看得比较扎心。。。 ##将传来的字符串变成数字组成的列表 def change ( idstring ) : idlist = list ( idstring ) idnum =

java 身份证工具类

我与影子孤独终老i 提交于 2020-03-14 06:39:49
package com.app.wx.common.util; import org.apache.commons.lang3.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 身份证工具类 * * <p> * 先来了解一下身份证的组成规则: <br/> * 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。<br/> * 2.地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。<br/> * 3.出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 <br/> * 4.顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。<br/> * 5.校验码 根据前面十七位数字码,按照ISO

HDFS体系结构及存储原理

♀尐吖头ヾ 提交于 2020-03-11 15:21:10
  首先要了解的是,HDFS采用的是主从架构,即一个主节点(名称节点),多个从节点(数据节点),主节点起到管家作用,负责提供数据目录服务,从节点都是数据节点负责数据存储。   我们都知道文件系统中都是有命名空间的概念的,HDFS也不例外,它的命名空间只有一个,里面包含了目录、文件、块,它的使用和传统的文件体系是一样的,我们访问HDFS文件系统,也和传统的访问方式一样通过 / + 目录名称访问。   提到访问数据,就必须知道HDFS的通信协议。所有的HDFS通信协议都是构建在TCP/IP的基础之上,而且不同组件之间,通信协议会有些差别,比如,客户端向名称节点发起的TCP连接,是使用客户端的协议和名称节点进行交互。而整个集群中名称节点和数据节点之间的交互是使用专门的的数据节点协议进行交互的,另外经常涉及到客户端读取数据,就需要客户端和数据节点进行交互,它通过远程调用RPC来实现。整个HDFS客户端实际上就是一个库,它向外界暴露HDFS文件系统的接口而且还隐藏了后台实现的复杂性,整个操作除了可以通过JAVA API实现,也可以直接通过shell命令实现。   对于分布式文件系统中经常遇到的几个问题,HDFS给出了如下解决方案:   (1)冗余数据保存的问题:数据以块为单位,每个块都被冗余保存,一般一个数据块被默认保存为三份。这种设计方式的好处:     1)加快数据传输速度

计算机组成原理--校验码

梦想与她 提交于 2020-03-04 23:47:46
校验码 定义:能够发现或者自动纠正错误的数据编码。通过增加一些冗余码,来检验或纠错编码。两个合法码字之间最少变化的二进制位数,为数据校验码的码距。 码距等于或大于2的数据校验码开始具有检错能力。码距越大,检、纠错能力就越强,而且检错能力总大于等于纠错能力。 三种常用的校验码如下: 奇偶校验码 在原编码上加一个校验码, 码距等于2,可以检出一位错误(或奇位数错误),但不能确定出错的位置,也不能检测出偶数位 。增加的冗余位叫奇偶校验位。 奇校验码:整个校验码中的1的个数为奇数 偶校验码:整个校验码中的1的个数为偶数 常用基于存储器数据的检查或者传输数据的检查。 海明码校验码 在有效信息中加入几个校验位形成海明码 例题: 海明码 循环冗余校验码(CRC) 在信息位后面加上冗余码。 来源: CSDN 作者: 勇敢前行的小蚂蚁 链接: https://blog.csdn.net/weixin_44333359/article/details/104652561

中华人民共和国身份证号码校验码计算方法详解

会有一股神秘感。 提交于 2020-03-02 18:12:13
今天我研究了下身份证号码的校验位,总结如下。 一、身份证号码 根据中华人民共和国国家标准《GB 11643-1999 公民身份号码(Citizen identification number)》,我们的身份证号由18位数字组成,其中前17个数字是本体码(master number),最后一个数字是校验码(check number),校验码是根据本体码的17个数字计算而得的。 (图片摘自《GB 11643-1999》) 在前面17个数字组成的本体码中,最开始的6位是地址码,是由《GB/T 2260 中华人民共和国行政区划代码》规定的,如北京市朝阳区是110105;中间8位数字代表出生日期,前面4位代表年,中间2位代表月,后面2位代表日,如1991年9月20日会被编为19910920;最后3位数字是一个顺序码,顺序码的奇数分配给男性,偶数分配给女性。最后1位是校验码,也就是我们后面要写的内容。 二、如何计算校验码 校验码采用的是国际标准化组织ISO订立的《ISO 7064: 1983》中的“MOD 11-2”校验码系统。 身份证号码一共18位,从右向左被依次编号为1、2、3、4、……、18,现在为各位都设置一个权(weight),用W表示,编号为i的数字权为:W[i]=2^(i-1) (mod 11) 如:W[1]=2^0%11=1;W[2]=2^1%11=2;等等 编号 权重 编号

18位身份证和组织机构代码校验ORACLE函数

前提是你 提交于 2020-03-02 17:13:35
18位身份证标准在国家质量技术监督局于1999年7月1日实施的gb11643-1999《公民身份号码》中做了明确规定。   gb11643-1999《公民身份号码》为gb11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外gb11643-1999《公民身份号码》从实施之日起代替gb11643-1989。    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。 其含义如下:   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

纠错编码1-海明码

两盒软妹~` 提交于 2020-02-27 14:58:26
海明码 海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1就变成0,原来是0就变成1)来将其纠正。 发现双比特错,纠错单比特错 工作流程: 确定校验码位数r 确定校验码和数据的位置 3.求出校验码的值 码位对照表 4.检错并纠错 来源: CSDN 作者: 铁达尼 链接: https://blog.csdn.net/weixin_42892844/article/details/104534995

海明校验码

半城伤御伤魂 提交于 2020-01-31 13:37:13
从看视频到看书,一直都没有明白,到底什么是海明校验码,只是感觉它很麻烦。有一句话说的特别对,难着不会,会者不难。其实,我们越是感觉它难,我们越对它有心里抵触,学习一个新知识,我们不要自己先把它给复杂化了,只要我们用心去学习,就像你认识一个新的朋友,只要你用心与她交流,一切就都不是问题! 下面是我对海明校验码的理解:(以一个例子来讲解)求信息1011的海明码。 1、记公式 首先记住这个公式:2^r≥k+r+1 (其中r为校验位 ,k为信息位)。 2、求位数 从题目1011是4位,可知信息位是4位,即k=4; 然后求出r的最接近且满足条件的值,得r=3。 3、画表 根据k+r=7,我们就画一个公7位的表: 4、填数 校验位一般都是在2^n的位置,因此这样填入: 然后再把1011从7开始填入信息位(校验位有数的往后措一位): 5、求校验位的值 确定校验位的分组原则:每个位数都由R1、R2、R3中的一或若干个所确定。 例如:1由第一位R1来校验;2由第二位R2来校验;由于3=1+2(1和2指的是位数,都是2的n次方)所以3由第一位R1和第二位R2校验,4由第四位R3校验,5和3道理是一样的,5=1+4(2^0+2^2);6=2+4;7=1+2+4,依次类推。得出下表: 进行汇总,看每个校验位都确定了哪一位。 R1:1、3、5、7 R2:2、3、6、7 R3: 4、5、6、7

循环校验码 CRC 原始报文为 “11001010101”,其生成多项式为:x^4^+x^3^+x+1.对其进行CRC编码后的结果为?

放肆的年华 提交于 2020-01-26 14:25:59
循环校验码 (CRC 是一种只能检错不能进行纠错的校验码) 他其实是利用了模2除法的计算方式 我用下面的例子简述一下使用方法。 原始报文为 “11001010101”,其生成多项式为:x 4 +x 3 +x+1.对其进行CRC编码后的结果为? 首先要先理解生成的多项式 x 4 +x 3 +x+1的含义,其中最高的次方代表二进制的位数,在本例中最高次方为4则生成的二进制数则有5位,x 4 代表最高位为1,其余以此类推将得到一串二进制码为 11011 所谓循环校验码的实现就是将原始报文除以这段二进制码,但是再除之前,需要对原始报文先进行补位,如何补位呢,这个也很好补,补上 生成的二进制数的位数-1个 0即可,所以报文将变成110010101010000(补上了4个0) 所以这个时候我们用 110010101010000 模二除以 11011 这里要切记,模二除法与普通的除法不同,模二的除法其实就是对数据进行异或处理。 什么是异或呢:异或运算是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1 所以进行异或运算得出结果为:0011 来源: CSDN 作者: nb_zsy 链接: https://blog.csdn.net/nb_zsy/article/details/104086327