生活中的ISBN码和身份证号码的校验
来源:互联网 发布:java与javascript区别 编辑:程序博客网 时间:2024/06/01 18:53
ISBN码
ISBN码是国际标准书号,出现在我们购买的图书后面,加上校验码一共有13位,其校验码的生成策略如下:
用1分别乘书号的前12位中的奇数位,用3乘以偶数位 ;
(2) 将各乘积相加,求出总和 ;
(3) 将总和除以10,得出余数 ;
(4) 将 10 减 去 余 数 后 即 为 校验位 。 如 相 减 后 的 数 值 为 10 ,为 校验位则 0 。
如我手边上的《数据库系统概论》的ISBN码如下:
978 - 7 - 04 - 040664 - 1
说明:
- 第一组固定为978或979;
- 第二组表示国家代码,如7表示中国
- 第三组为出版社代码,如04表示高等教育出版社
- 第四组为该图书的编号
- 最后一组就是校验位
我们按照上面对的方法计算一次看看:
奇数位依次是:9 8 0 0 0 6
偶数为依次是:7 7 4 4 6 4奇数为*1+偶数*3 = 23 + 96 = 119
119 % 10 = 9
10 - 9 = 1
故,我们得到校验位为: 1
代码描述如下:
import java.util.Scanner;public class TestOne { public static void main(String[] args) { Scanner jin=new Scanner(System.in); int a[] =new int[12]; int sum=0; for(int i=0;i<12;i++){ a[i]=jin.nextInt(); if((i+1)%2==0){ sum+=a[i]*3; }else{ sum+=a[i]*1; } } System.out.println("校验位为:"+(10-(sum%10))); }}
身份证号码
现在先给出一个不包含校验位的17位身份证号码
21070319840807301
现在我们怎样求出这个身份证号码的校验位呢?
首先对前17位进行加权求和:
假设我们前17位存放在数组a[i]中。
假设权重存放在数组w[i]中,则权重对的值为
我们把i=0到 i=16依次计算得到的权重的值为:
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
计算公式:
根据上面计算公式计算得到S=274
然后我们将S%11得到T=S%11=10
最后根据我们得到的T的值去查找校验码:
T值 0 1 2 3 4 5 6 7 8 9 10 校验码 1 0 X 9 8 7 6 5 4 3 2
故可以得到校验码为 2
代码描述:
import java.util.Scanner;public class TestOne { public static void main(String[] args) { Scanner jin=new Scanner(System.in); int a[] =new int[17]; int w[] ={7,9,10,5,8,4,2,1,6,3, 7, 9, 10, 5, 8, 4, 2}; char c[]={'1','0','X','9','8','7','6','5','4','3','2'}; int sum=0; for(int i=0;i<17;i++){ a[i]=jin.nextInt(); sum+=a[i]*w[i]; //sum+=a[i]*(Math.pow(2, 18-(i+1))%11); 也可 } int t=sum%11; System.out.println("校验位为:"+c[t]); }}
最后
明天考试加油!O(∩_∩)O哈哈~
阅读全文
0 0
- 生活中的ISBN码和身份证号码的校验
- PHP校验ISBN码的函数
- PHP校验ISBN码的函数
- isbn的校验
- 身份证号码的合法性校验
- 身份证号和ISBN号校验规则
- 18位身份证号码的校验
- 校验身份证号码的有效性【JS】
- C#ISBN码简介与校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 校验身份证号码
- 身份证号码校验 java校验
- 【PB】身份证号码校验的完整程序
- DEX文件混淆加密
- JavaScript之正则表达式验证邮箱,手机号码,身份证,网址,QQ,邮政编码,中文
- KMP算法中Next数组及改进后的nextval数组的求法
- [高频] 一.Interview Style
- OpenGl绘制基本单元注解
- 生活中的ISBN码和身份证号码的校验
- 二分法求一元二次方程的根
- 使用jersey2.X发布rest服务
- [内核源码][编译] 关于openssl/opensslv.h错误的解决方案
- windows10下使用Charles进行移动端抓包
- 1166 敌兵布阵(线段树求区间和)
- 面试问题你觉得你能胜任么
- 1698 Just a Hook(线段树段修改)
- 安装Boost