有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 1565|回复: 15
收起左侧

用Java算法实现新18位身份河蟹证号的生成

[复制链接]

该用户从未签到

7

主题

3

好友

1092

积分

Continue

积分
1092
发表于 2012-8-10 20:47:08 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
新18位身份证号的结构是:六位数字地址码+八位数字出生日期码+三位数字顺序码+一位数字校验码
前17位都很好得到(前六位是地区行政编码,比如北京市是110000,其他请参考官方网站查询:www.stats.gov.cn/tjbz/index.htm 。八位出生日期要注意,比如你是1990年1月1日出生的,那么就是:19900101),关键也是此算法唯一的难点是最后一位校验码的计算。步骤如下:
1、将前17位数乘以不同的系数,系数对应表:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2、将前17位数加上上面的每个数相乘的结果
3、将上面的结果对11取余(范围:0 1 2 3 4 5 6 7 8 9 10)
4、将上面的余数参照对应表:1 0 X 9 8 7 6 5 4 3 2
上面的算法是从网上摘抄下来的,也是传的比较广的一个,姑且我就以这个算法为蓝本用Java表示出来喽!
[mw_shl_code=java,true]private static int[] multiNum=new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        private static String[] resNum=new String[]{"1","0","X","9","8","7","6","5","4","3","2"};
       
        /**
         * 输入参数返回身份河蟹证号码的方法
         * @param addrNo 地区行政编码(6位)
         * @param birthDate //出生日期(8位)
         * @param orderCode        顺序码(3位数,男奇女偶)
         * @return 身份河蟹证号码
         */
        public static String getIDnumber(String addrNo,String birthDate,String orderCode){
                String orderNumber="";//存放顺序码
                String num17=addrNo+birthDate+orderCode;//拼接出前17个数字
                char[] num17Ch=num17.toCharArray();//将前17字符串转成字符数组
                int num17Tmp=0;//存放第二步的结果
                for(int i=0;i<multiNum.length;i++){//将第一步和第二部合并
                       
                        int num17ChTmp=Integer.parseInt(num17Ch+"");
                        num17Tmp+=(num17ChTmp+num17ChTmp*multiNum);
                }
                int oddNumber=num17Tmp%11;//第三步(对11取余)
                for(int i=0;i<resNum.length;i++){//第四步(余数对象获得对应顺序码)
                        if(oddNumber==i){
                                orderNumber=resNum[i-1];//根据原算法不需要-1,但亲测多一位无奈此处减去1
                        }
                }
                return num17+orderNumber;//返回前17位字符串+顺序码
        }[/mw_shl_code]

调用这个静态方法,传入三个字符串即可得到一个18位身份河蟹证号了。
以上的算法亲测貌似有一点的偏差,不过确实能生成一个有效的18位身份河蟹证号,对付网络注册还是绰绰有余啦!不信大家自己拿回去试试喽!

评分

参与人数 3宅魂 +1 宅币 +43 贡献 +2 元气(技能点) +1 活跃 +1 收起 理由
Mr_Alex + 1 + 3 + 1 o(* ̄▽ ̄*)ブ 发糖
氺菓 + 10 + 1 我终于知道身份河蟹证的算法了嗯.
风音洛洛 + 30 + 1 + 1 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

7

主题

3

好友

1092

积分

Continue

积分
1092
 楼主| 发表于 2012-8-10 20:50:44 | 显示全部楼层
备注:忠于原著,代码第24行i可以不用-1
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

388

主题

2042

好友

10万

积分

懒人

积分
104579
发表于 2012-8-10 20:57:43 | 显示全部楼层
@3*碉堡了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

10

好友

1万

积分

第一章

积分
12615
发表于 2012-8-10 21:05:30 | 显示全部楼层
太碉堡了,我原来就把身份证号最后一位减一号,貌似也行
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

0

好友

112

积分

New Game

积分
112
发表于 2012-8-17 10:16:31 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

26

好友

1382

积分

Continue

积分
1382
发表于 2012-8-19 20:11:44 | 显示全部楼层
写代码的风格还不错,就是老不加空格,要看死人了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

3

好友

1092

积分

Continue

积分
1092
 楼主| 发表于 2012-8-20 14:31:36 | 显示全部楼层
vulcan 发表于 2012-8-19 20:11
写代码的风格还不错,就是老不加空格,要看死人了

谢谢,以后注意,忘了格式化。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

21

好友

5802

积分

序章

积分
5802
发表于 2012-8-22 10:49:32 | 显示全部楼层
看贴回贴能拿分。为什么不回?你说呢
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

17

主题

62

好友

7801

积分

序章

积分
7801
发表于 2012-9-10 10:31:14 | 显示全部楼层
以前用C++写过一次 学习了 多谢
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 423 天

连续签到: 1 天

[LV.9]以坛为家II

77

主题

425

好友

16万

积分

Webmaster

唯我独尊

积分
163198

国庆70周年纪念

发表于 2012-9-10 10:34:34 | 显示全部楼层
好吧 原来身份河蟹证号是这样的
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

18

好友

4928

积分

序章

积分
4928
发表于 2012-9-10 13:17:30 | 显示全部楼层
谢谢分享啊
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

好友

976

积分

New Game

积分
976
发表于 2012-12-7 14:46:06 | 显示全部楼层
#17!学习到了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

131

主题

294

好友

12万

积分

最终章

CODE:yggdrasil

积分
121424

技术宅四周年庆组委会纪念

发表于 2012-12-7 20:49:14 | 显示全部楼层
额,好吧,其实原来我也不懂的说
本人在此严重申明,我是男生!!!
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

21

主题

63

好友

1万

积分

第一章

积分
18553
发表于 2012-12-9 17:58:38 | 显示全部楼层
都是学爪哇的啊
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

23

好友

7214

积分

序章

积分
7214
发表于 2015-8-21 14:38:24 | 显示全部楼层
先收藏了,慢慢研究一下!!
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-6-11 00:11 , Processed in 0.394134 second(s), 48 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表