第一篇:新旧身份证合法性验证及相互转换算法
新旧身份证合法性验证及相互转换算法.txt遇事潇洒一点,看世糊涂一点。相亲是经销,恋爱叫直销,抛绣球招亲则为围标。没有准备请不要开始,没有能力请不要承诺。爱情这东西,没得到可能是缺憾,不表白就会有遗憾,可是如果自不量力,就只能抱憾了。新旧身份证合法性验证及相互转换算法
——谨以此文献给共事3年即将离职的PPL
作者:成晓旭
前天,看到PPL在一个需要网站上注册,但该网站要求输入一个身份证号码,并且随便输入一个还不行:对方还要验证输入身份证的合法性,所以,烦得PPL在网上到处去找。基于此目前,特别在网上收集身份证相关的资料,整理成文,作为给PPL饯行的礼物之一,公布于我的Blog。也预祝PPL:“找份好工作,找个好老婆!”
1、关于中国居民身份证的常识:
我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。
〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。
〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
出生日期码:表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码:表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
校验码:是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
关于身份证号码最后一位的校验码的算法如下:
∑(a[i]*W[i])mod 11(i = 2, 3,..., 18)
“*” : 表示乘号
i: 表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。
a[i]: 表示身份证号码第 i 位上的号码
W[i]: 表示第 i 位上的权值 W[i] = 2^(i-1)mod 11
设:R = ∑(a[i]*W[i])mod 11(i = 2, 3,..., 18)
C = 身份证号码的校验码
则R和C之间的对应关系如下表:
R:0 1 2 3 4 5 6 7 8 9 10
C:1 0 X 9 8 7 6 5 4 3 2
由此看出 X 就是 10,罗马数字中的 10 就是X,所以在新标准的身份证号码中可能含有非数字的字母X。
2、算法:
/** *//** * */ package cxx.sourceCode.base;
import java.text.DateFormat;import java.text.NumberFormat;import java.text.ParseException;import java.util.Date;import java.util.Random;
/** *//** * @author 成晓旭 * */ public class Identity...{ // 位权值数组
private static byte[] Wi=new byte[17];// 身份证前部分字符数
private static final byte fPart = 6;// 身份证算法求模关键值
private static final byte fMod = 11;// 旧身份证长度
private static final byte oldIDLen = 15;// 新身份证长度
private static final byte newIDLen = 18;// 新身份证年份标志
private static final String yearFlag = “19”;// 校验码串
private static final String CheckCode=“10X98765432”;// 最小的行政区划码
private static final int minCode = 150000;// 最大的行政区划码
private static final int maxCode = 700000;// 旧身份证号码
// private String oldIDCard=“";// 新身份证号码
// private String newIDCard=”“;// 地区及编码
//private String Area[][2] = private static void setWiBuffer()...{ for(int i=0;i //获取新身份证的最后一位:检验位 private static String getCheckFlag(String idCard)...{ int sum = 0;//进行加权求和 for(int i=0;i<17;i++)...{ sum += Integer.parseInt(idCard.substring(i,i+1))* Wi[i];} //取模运算,得到模值 byte iCode =(byte)(sum % fMod);return CheckCode.substring(iCode,iCode+1);} //判断串长度的合法性 private static boolean checkLength(final String idCard,boolean newIDFlag)...{ boolean right =(idCard.length()== oldIDLen)||(idCard.length()== newIDLen);newIDFlag = false;if(right)...{ newIDFlag =(idCard.length()== newIDLen);} return right;} //获取时间串 private static String getIDDate(final String idCard,boolean newIDFlag)...{ String dateStr = ”“;if(newIDFlag)dateStr = idCard.substring(fPart,fPart+8);else dateStr = yearFlag + idCard.substring(fPart,fPart+6);return dateStr;} //判断时间合法性 private static boolean checkDate(final String dateSource)...{ String dateStr = dateSource.substring(0,4)+”-“+dateSource.substring(4,6)+”-“+dateSource.substring(6,8);System.out.println(dateStr);DateFormat df = DateFormat.getDateInstance();df.setLenient(false);try...{ Date date= df.parse(dateStr);return(date!=null);} catch(ParseException e)...{ // TODO Auto-generated catch block return false;} } //旧身份证转换成新身份证号码 public static String getNewIDCard(final String oldIDCard)...{ //初始化方法 Identity.setWiBuffer();if(!checkIDCard(oldIDCard))...{ return oldIDCard;} String newIDCard = oldIDCard.substring(0, fPart);newIDCard += yearFlag;newIDCard += oldIDCard.substring(fPart, oldIDCard.length());String ch = getCheckFlag(newIDCard);newIDCard += ch;return newIDCard;} //新身份证转换成旧身份证号码 public static String getOldIDCard(final String newIDCard)...{ //初始化方法 Identity.setWiBuffer();if(!checkIDCard(newIDCard))...{ return newIDCard;} String oldIDCard = newIDCard.substring(0,fPart)+ newIDCard.substring(fPart+yearFlag.length(),newIDCard.length()-1);return oldIDCard;} //判断身份证号码的合法性 public static boolean checkIDCard(final String idCard)...{ //初始化方法 Identity.setWiBuffer();boolean isNew = false;//String message = ”“;if(!checkLength(idCard,isNew))...{ //message = ”ID长度异常“;return false;} String idDate = getIDDate(idCard, isNew);if(!checkDate(idDate))...{ //message = ”ID时间异常“;return false;} if(isNew)...{ String checkFlag = getCheckFlag(idCard);String theFlag = idCard.substring(idCard.length()-1,idCard.length());if(!checkFlag.equals(theFlag))...{ //message = ”新身份证校验位异常“;return false;} } return true;} //获取一个随机的”伪“身份证号码 public static String getRandomIDCard(final boolean idNewID)...{ //初始化方法 Identity.setWiBuffer();Random ran = new Random();String idCard getAddressCode(ran)+getRandomDate(ran,idNewID)+getIDOrder(ran);if(idNewID)...{ String ch = getCheckFlag(idCard);idCard += ch;} return idCard;} //产生随机的地区编码 private static String getAddressCode(Random ran)...{ if(ran==null)...{ return ”“;}else...{ int addrCode = minCode + ran.nextInt(maxCode-minCode);return Integer.toString(addrCode); = } } //产生随机的出生日期 private static String getRandomDate(Random ran, boolean idNewID)...{ // TODO Auto-generated method stub if(ran==null)...{ return ”“;} int year = 0;if(idNewID)...{ year = 1900 + ran.nextInt(2007-1900);}else...{ year = 1 + ran.nextInt(99);} int month = 1+ran.nextInt(12);int day = 0;if(month==2)...{ day= 1+ran.nextInt(28);}else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)...{ day= 1+ran.nextInt(31);}else...{ day= 1+ran.nextInt(30);} NumberFormat nf = NumberFormat.getIntegerInstance();nf.setMaximumIntegerDigits(2);nf.setMinimumIntegerDigits(2);String dateStr = Integer.toString(year)+nf.format(month)+nf.format(day);return dateStr;} //产生随机的序列号 private static String getIDOrder(Random ran)...{ // TODO Auto-generated method stub NumberFormat nf = NumberFormat.getIntegerInstance();nf.setMaximumIntegerDigits(3);nf.setMinimumIntegerDigits(3);if(ran==null)...{ return ”“;}else...{ int order = 1+ran.nextInt(999);return nf.format(order);} } public Identity()...{ setWiBuffer();} /** *//** * @param args */ public static void main(String[] args)...{ // TODO Auto-generated method stub String randomID=Identity.getRandomIDCard(true);System.out.println(”随机身份证:“+randomID);/**//* String oldID=”“;String newID=Identity.getNewIDCard(oldID);System.out.println(”旧身份证:“+oldID);System.out.println(”新身份证:“+newID);String oldCard = Identity.getOldIDCard(newID);System.out.println(”旧身份证:“+oldCard);/* String dateSource=”2000-9-30“;if(id.checkDate(dateSource))System.out.println(”正确时间串:“+dateSource);else System.out.println(”错误时间串:"+dateSource);* * */ } } 三、内涵与启示 (一)“新旧动能”政策体系产生背景 1.消费和服务业将取代投资、出口成为拉动经济增长的主要动力 过去30年,中国平均经济增速为10%,这主要是得益于其成本竞争力(劳动力、土地、环境、汇率等)、改革红利(1979年农村改革,1992年邓小平南巡改革,1998年国企改革和2001年加入WTO)和政府强势主导。如今这种增长模式已经达到了极限:成本竞争力消失,国企效率下滑,杠杆率飙升,最近资产市场震荡也暴露出政府政策调控的有效性不足。中国的经济增速从10%降至5%-6%,意味着中国经济进入了“新常态”。“新常态”下经济增速放缓是大势所趋,经济结构也将随之深度调整。消费和服务业将取代投资、出口成为拉动经济增长的主要动力。如图1所示,从2013年第一季度开始,第三产业增加值同比增速开始高于第二产业增加值增速,成为拉动经济增长的主要动力。与此同时,作为拉动经济增长的三驾马车之一,消费支持对经济的贡献超过了资本形成的贡献,对外贸易对经济增长的贡献为负。 2.新经济对中国经济发展支撑力逐步提升 高盛在报告《“新常态”下的“新中国”经济投资》中提出了一套系统性的分析框架,以便更好地追踪变革中的中国经济。高盛从143个行业,3636家公司中,进行挑选了30个次级行业的671家公司,作为追踪中国新经济的参照。这些公司来自A股、H股和中概股,市值1.8万亿美元。这些产业遍布卫星光缆、网购、教育服务、影视娱乐、家用耐用品、能源服务、资产管理、生物科技、航天国防、IT咨询等30个领域。相对于传统产业,新经济产业中健康医疗、科技行业的比例大幅提升,合计占到60%以上。过去几年的数据也表明,新经济的表现确实要远远优于传统产业 3.山东省区域性经济风险事件频发,引起中央层面注意。 2017年初,曾经的中国500强企业山东天信集团陷入债务泥潭,7家关联公司天信集团、天圆铜业、天信光伏、天信进出口、天泽物资、天泽物流、澳纳纺织已进入破产重整程序,其中负债最多的山东天圆有限公司负债总额高达104.52亿元,负债率高达180.77%。这是继山东上市公司中国宏桥、魏桥纺织同时发布延迟刊发2016年全年业绩停牌,长兴集团破产、齐星集团债务危机后,又爆发的一起企业危机事件。一系列的区域性企业债务危机揭示了山东经济的“窘境”:虽然山东省在经济体量方面位居全国前三,但在产业结构、人均收入、科技支撑以及民营经济和新兴业态发展等许多方面,和广东、浙江等新经济活跃省份的差距还很大。同时山东省区域性经济风险事件也引起了中央层面的注意,李克强总理在两会期间参加山东代表团审议时,指出了山东省“新旧动能转换”问题,并于今年4月专程到山东省进行调研,考察了山东省“新旧动能转换”工作情况。 (二)内涵解析 “新旧动能”自2015年开始出现在中央和地方政府主要领导讲话和文件中,在2016年在互联网出现的频率逐步提升。2016年末,特别是进入2017年以来,“新旧动能”更是频繁出现在政府相关文件中,内涵也逐渐丰富和完善。“新旧动能”作为政府官方用语,并没有严格的概念界定,但是我们可以从一系列政府文件中和领导讲话中进行理解。 1.发展“新经济”是培育“新动能”的重要措施。 在不同时期,“新经济”有不同的内涵,当前新经济主要是指创新性知识在知识中占主导、创意产业成为龙头产业的新经济形态。而“新动能”的内涵更加广泛,需求端(例如:消费能力提升)和供给端(例如:第三产业快速发展或新产业形态)都能成为经济发展的“新动能”。2016年政府工作报告正式出现“新经济”,并将“新经济”和“新动能”联系在一起。报告指出要推动新技术、新产业、新业态加快成长,培育壮大新动能,加快发展新经济。因此,我们可以片面理解两者之间的关系:由于技术进步,一种新的产业形态或模式成为促进经济社会发展的新动力。2.“旧动能”可转换为“新动能” 如果将“新动能”对应“新经济”,那么“旧动能”应该对应传统产业和传统经济模式,既包括“两高一剩”产业,也包括对经济增长支撑作用下降的对外贸易。对于“旧动能”,实行产业转型升级和提升发展效率和质量,可转换为“新动能”。 3.“新旧动能”是“新常态”背景下经济增长的“双引擎”。 中国经济进入了新常态,主要特征就是:经济由过去高速增长变为中速增长,由过去30年的平均10%下降到如今的6%左右。在经济新常态背景下,消费和服务业取代投资、出口成为拉动经济增长的主要动力,新经济对于经济增长贡献和重要性日益提高,但是传统产业仍然是经济发展的重要支撑。“新旧动能”共同构成新常态背景下支撑经济增长的力量。 (三)启示 1.抓住“新旧动能转换”的机遇 李克强总理对山东省经济“新旧动能转换”给予的高度期望,希望山东在新旧动能转换中继续打头阵。目前,山东省各地市和各业务部门都在积极推进“新旧动能转换”工作。山东省层面制定引领性政策和规划,各地市都出台了“新旧动能转化”工作计划,青岛市各区(市)纷纷推出了“新旧动能转化”重要工程。这标志着一系列重要工程将会在山东省推进,为我行参与全省经济“新旧动能转换”和拓展业务空间提供了新的机遇。建议总行各部门和各分支行关注和研判山东省和各地市推出的重要政策,采取针对性措施。 2.巩固传统优势,提升支撑我行发展的“旧动能” 中国的政治体制决定了政府将继续在资源分配过程中扮演着重要角色,政府在金融活动中仍是重要的参与者。政府金融将在未来长时间内成为银行重要的业务。同时,青岛银行在过去20多年的发展历程中积累了大量的忠诚客户,它们是支撑我行目前发展的基础。继续发挥地方法人银行的优势,巩固与地方政府、原有客户的良好关系,挖掘和提升服务原有客户的能力是目前我行稳健发展的重要支撑。 3.关注“新经济”,培育支撑我行发展的“新动能” 高盛在《“新常态”下的“新中国”经济投资》研究发现:中国经济增长引擎转向消费和服务业,传统的中国投资框架已经无法有效追踪中国经济的“新常态”。投资者传统上还习惯于根据PMI、工业增加值等数据来判断中国经济。中国经济进入“新常态”,经济结构和经济发展方式都将发生深入变革,“新经济”与传统经济发展相比,表现出“轻资产、轻污染、新技术、新模式、重人力资本”等特点。传统信贷模式和服务模式已经无法满足“新经济”发展要求,改变不合理制度和创新服务模式,提升服务“新经济”的能力,是适应经济社会发展的需要,也是支持我行基业长青的需要。 新旧动能转换专题研讨材料 新年伊始,山东省委书记刘家义在山东省全面展开新旧动能转换重大工程动员大会上作了重要讲话,深刻阐明了加快新旧动能转换综合试验区、推进新旧动能转换重大工程的总的要求、重大意义,对把握重大机遇、发展产业集群、着力深化改革、创新领导方式作了系统部署,明确了当前和今后一个时期的重点任务和工作要求。 在新一轮深化改革开放、推动高质量发展的赛跑中,省委省政府清醒地意识到,产业结构不优,新动能成长不快,发展活力不足,经济效益不高,严重影响了山东的区域竞争优势。新旧动能转换,最根本的任务就在于,加快把新兴产业培育大,把传统产业改造好,把落后产能化解掉,提升经济发展质量和竞争力,打造现代化经济体系和发展新局面。 从改革层面讲,思想观念里的革新,较之产业结构、宏观政策、激励机制上的改革,更为关键。改变保守陈旧的思想观念,来一场“头脑风暴”和观念革命,是改革攻坚、转型发展不可忽视的课题。许多人注意到,发达省份的干部遇到新矛盾新问题习惯“向前看”,善用创新的思维寻找解决办法,山东的一些干部却习惯于“向后看”,看有没有成规惯例可循、有没有现成经验可用。因循守旧、害怕改革,为官不为、不敢担当,只有先克服这些态度问题,发展上的起色才能慢慢显露出来。说到底,加快新旧动能转换,就是促进山东经济发展,而经济发展的根本目的是提高人民群众的获得感和幸福感。应坚持以人民为中心的发展思想,践行新发展理念,共享新旧动能转换取得的成果。同时,我们也要清楚地认识到,以人民为中心,服务和满足人民群众的需求和期盼,也可以加快新旧动能转换的速度,推动新旧动能转换向更高水平迈进。 面对新旧动能转换重大发展机遇,我们要拿出勇气、拿出干劲,抓住机遇、抓紧时间,全力以赴做好新旧动能转换这篇大文章,努力为全市、全省发展大局作出应有贡献。 #include #pragma hdrstop #include “Unit1.h” //------------- #pragma package(smart_init) #pragma resource “*.dfm” TForm1 *Form1; //------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int len=m_Num->GetTextLen();//得到字符串输入长度 if(len==15) { bool bl=true; for(int i=0;i<15;i++)//判定输入是否合法,即输入不为数字 { char tem=m_Num->Text[i+1]; if(tem<'0'||tem>'9') { ShowMessage(“身份证号输入不合法!”); bl=false; break; } } if(m_Num->Text.SubString(9,2).AnsiCompare(“01”)<0||m_Num->Text.SubString(9,2).AnsiCompare(“12”)>0)//检查月份输入是否合法 { ShowMessage(“身份证号中月份输入不合法!”); bl=false; } if(m_Num->Text.SubString(11,2).AnsiCompare(“01”)<0||m_Num->Text.SubString(11,2).AnsiCompare(“31”)>0)//检查日期输入是否合法 { ShowMessage(“身份证号中日期输入不合法!”); bl=false;} if(bl){AnsiString tem; AnsiString sex=((m_Num->Text[15]-'0')%2==0)?“女”:“男”;//判定 男(奇数)、女(偶数) tem=“该身份证为旧式身份证,其中包含信息信息如下:rn出生年月:”;tem+=m_Num->Text.SubString(7,4); tem+=“年”; tem+=m_Num->Text.SubString(11,2); tem+=“月”; tem+=m_Num->Text.SubString(13,2); tem+=“日”; tem+=“rn性别为:”; tem+=sex; m_Fmt->Text=tem;//输出 } } else if(len==18) { bool bl=true; for(int i=0;i<18;i++) { char tem=m_Num->Text[i+1];//依次取出字符串中的字符进行判 定,不为数字即不合法 if(i==17&&tem=='x'){break;}//旧式身份证末尾X判定if(tem<'0'||tem>'9') { ShowMessage(“身份证号输入不合法!”); bl=false; break; } } if(m_Num->Text.SubString(11,2).AnsiCompare(“01”)<0||m_Num->Text.SubString(11,2).AnsiCompare(“12”)>0) { ShowMessage(“身份证号中月份输入不合法!”); bl=false; } if(m_Num->Text.SubString(13,2).AnsiCompare(“01”)<0||m_Num->Text.SubString(13,2).AnsiCompare(“31”)>0) { ShowMessage(“身份证号中日期输入不合法!”); bl=false; } if(bl) {String tem; AnsiString sex=((m_Num->Text[17]-'0')%2==0)?“女”:“男”; tem=“该身份证为新式身份证,其中包含信息信息如下:rn出生年月:”;tem+=m_Num->Text.SubString(7,4); tem+=“年”; tem+=m_Num->Text.SubString(11,2); tem+=“月”; tem+=m_Num->Text.SubString(13,2); tem+=“日”; tem+=“rn性别为:”; tem+=sex; m_Fmt->Text=tem; } } else ShowMessage(“身份证号长度输入不合法!”); } //------------- void __fastcall TForm1::Button2Click(TObject *Sender) { m_Num->Clear();//清空编辑框 m_Fmt->Clear(); } //------------- 年潍坊市专业技术人员公共科目(新旧动能)1 1.哪种思维不属于互联网思维?(2.0分)D.逆向思维 2.以下哪个不属于《推进“互联网+政务服务”开展信息惠民试点实施方案》提出的“三个一”?(2.0分)C.一站式服务 3.“工业互联网”这个概念是由哪个公司首先提出来的?(2.0分)B.通用电气 4.哪个省最早提出了“电商换市”?(2.0分)B.浙江 5.德国政府哪一年正式提出了“工业4.0”战略?(2.0分)C.2013年 6.工业和信息化部的3G牌照是在哪一年发放的?(2.0分)B.2009年 7.在中国政府官方文件中提出“互联网+政务服务”是哪一年?(2.0分)D.2016年 8.在中国政府官方文件中提出“互联网+”是哪一年?(2.0分)D.2016年 9.“信息化与工业化融合”最早是在哪次会议上提出来的?(2.0分)A.党的十六大 10.截至2017年6月,中国IPv4地址有多少个?(2.0分)A.3.38亿 11.IBM公司的“深蓝”超级计算机在哪一年击败国际象棋世界冠军卡斯帕罗夫?A.1997年 12.全国第一个出台信息经济发展政策的是哪个省?(2.0分)B.浙江省 13.哪个省最早提出建设一批特色小镇?(2.0分)B.浙江省 14.《深化标准化工作改革方案》提出放开搞活哪类标准?(2.0分)D.企业标准 15.山东省第一个质量教育基地在哪个地市?(2.0分)D.聊城 16.美国有经济周期记录以来持续时间最长的一次增长是哪段时期?(2.0分)B.1991-2000年 17.哪个城市提出建成我国北方重要的新经济形态集聚区和策源地?(2.0分) 2.0分)(青岛 18.《关于促进工业设计发展的若干指导意见》是哪一年出台的?(2.0分)A.2010年 19.截至2017年6月,中国网民中使用手机上网的人群占比达到多少?(2.0分)C.96.3% 20.以下哪个不是《国务院关于积极推进“互联网+”行动的指导意见》确定的“互联网+”重点行动?(2.0分)C.全域旅游第二篇:新旧动能转换(推荐)
第三篇:新旧动能转换材料
第四篇:身份证验证程序
第五篇:新旧动能转换答案