`
linliangyi2007
  • 浏览: 1012630 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Graceful Java Programming 优雅Java编程 之 身份证编码校验

阅读更多
把自己做的工具类留个档,同时分享给大家
	/**
	 * 将旧的15位身份证件号,转成18位,
	 * 同时进行身份证信息的简单校验
	 * 如果是18位,则只进行校验
	 * @param orgIDCardNo
	 * @return
	 * @throws ParseException 身份证校验异常
	 */
	public static String converse15DigitTo18Digit(String orgIDCardNo) throws ParseException{
		if(orgIDCardNo == null){
			throw new IllegalArgumentException("身份证号为null");
		}
		String buffer = orgIDCardNo.trim();
		int numberLength = buffer.length();
		
		//校验身份证位数,如果不是15位或18位,则抛出“IllgalArgumentException非法的证件号码”异常
		if(numberLength != 15 && numberLength != 18){
			throw new ParseException("不合格的身份证号" , 0);
		}
		
		//校验身份证的日期参数
		if(numberLength == 15){
			//校验15位身份证的日期参数
			String birthDateStr = buffer.substring(6 , 12);
			try {
				new SimpleDateFormat("yyMMdd").parse(birthDateStr);
			} catch (ParseException e) {
				e.printStackTrace();
				throw new ParseException("不合格的身份证号" , 7);
			}
			//对15位的证件转换18位的前缀部分
			buffer = buffer.substring(0,6) + "19" + buffer.substring(6 , 15);
			
		}else{			
			//校验18位身份证的日期参数
			String birthDateStr = buffer.substring(6 , 14);
			try {
				new SimpleDateFormat("yyyyMMdd").parse(birthDateStr);
			} catch (ParseException e) {
				e.printStackTrace();
				throw new ParseException("不合格的身份证号" , 7);
			}
			//截取前17位,对18位证件进行尾部编码重计算
			buffer = buffer.substring(0,17);
		}
		
		//计算18位证的校验位	
		char[] charArray = buffer.toCharArray();
		int factor = 0;
		for(int i = 18 ; i>=2 ; i--){
			if(charArray[18 - i] < '0' || charArray[18 - i] > '9'){
				throw new ParseException("不合格的身份证号" , 18-i);
			}
			factor += (((int)Math.pow(2, (i-1))) % 11) *((charArray[18 - i] & 0xff) - 48);
		}
		factor %= 11;
		switch(factor){
		case 0 :
			buffer += "1";
			break;
		case 1 :
			buffer += "0";
			break;
		case 2 :
			buffer += "X";
			break;
		case 3 :
			buffer += "9";
			break;
		case 4 :
			buffer += "8";
			break;
		case 5 :
			buffer += "7";
			break;
		case 6 :
			buffer += "6";
			break;
		case 7 :
			buffer += "5";
			break;
		case 8 :
			buffer += "4";
			break;
		case 9 :
			buffer += "3";
			break;
		case 10 :
			buffer += "2";
			break;
		}
		
		//如果是18位的身份证,要同原始的证件代码进行校验
		if(numberLength == 18 
				&& !buffer.equals(orgIDCardNo.trim())){
			throw new ParseException("不合格的身份证号" , 18);
		}
		
		return buffer;		
	}
2
2
分享到:
评论

相关推荐

    Go-graceful优雅的重载http服务器零宕机时间兼容systemdsupervisor

    本文将深入探讨如何使用Go-graceful库来实现优雅的HTTP服务器重载,确保在更新服务时实现零宕机时间,并同时兼容systemd和supervisor这两种常见的系统管理工具。 `Go-graceful`是一个专门设计用于处理HTTP服务器的...

    graceful:写优雅服务的库

    控制优雅的应用程序 优雅的应用程序可以用信号来控制。 主进程支持以下信号 期限/INT 快速关机 放弃正常关机 合肥 重启工人 启动新的工作进程 优雅关闭旧的工作进程 USR2 升级可执行文件(启动新的主进程和工作进程...

    Laravel开发-graceful-cache

    `graceful-cache`是一个针对Laravel的缓存存储库的包装器,其目标是提供一种更加优雅、灵活的方式来管理你的应用缓存。在这个项目中,开发者可以更好地控制缓存的生命周期,提高应用的效率。 `graceful-cache`的...

    前端开源库-graceful-readlink

    优雅的前端开源库——`graceful-readlink`是一个针对`fs.readlink`进行优化的模块,主要用于解决Node.js在处理符号链接时可能出现的问题。在Node.js原生的`fs`模块中,`fs.readlink`函数用于读取符号链接(symbolic ...

    前端开源库-graceful-ncp

    `graceful-ncp`是一个专门为前端开发者设计的开源库,它实现了优雅的、异步的文件和目录的递归复制功能。这个库的核心目标是提供一种更稳定、更易用的方式来处理文件系统操作,特别是在处理大量文件或复杂目录结构时...

    java程序发布成window后服台

    Java程序在Windows环境下发布为后台服务是常见的需求,这使得应用程序能够在系统启动时自动运行,无需用户交互。本文将详细讲解如何将一个Java程序打包并发布为Windows后台服务,同时提供一个具体的示例。 首先,...

    前端开源库-graceful-kill

    本文将深入探讨“graceful-kill”的概念、作用以及它如何改善前端应用程序的性能。 1. 优雅地杀死进程 在计算机系统中,进程的正常退出通常涉及清理资源、保存状态和关闭连接等操作。"优雅地杀死"一个进程意味着...

    Graceful Graph

    优雅图(Graceful Graph)是图论中的一个概念,它源于数学和计算机科学,特别是网络流和图遍历的问题。这个概念是由美国数学家Edward G. Kolaitis在1970年代提出的,目的是研究图的标号特性。在英特尔线程挑战赛3月...

    graceful-fs-fs模块的一个替代拥有各种改进

    优雅的fs(graceful-fs)是Node.js生态系统中一个重要的模块,它作为原生fs模块的一个增强版本,提供了一系列的改进和优化,旨在提高文件系统的操作性能和稳定性。在Node.js开发过程中,文件系统操作是不可或缺的一...

    Laravel开发-graceful-laravel-workers

    3. **优雅关闭(Graceful Shutdown)**:在“graceful-laravel-workers”中,主要目标是实现优雅关闭,即在接收到停止命令时,工作进程会等待当前处理的任务完成后再退出,确保数据的一致性和完整性。 4. **...

    express-graceful-exit, 为了得到零停机,优雅地退出 Express.zip

    express-graceful-exit, 为了得到零停机,优雅地退出 Express express-graceful-exit具有零停机时间的组件为 node.js 使用 Express 部署。 它是为 3. X, 开发的,因此它可能需要与 Express 2.x 兼容。这个模块最初是...

    Scalable IO in Java -Doug Lea

    在Scalable IO in Java中,Doug Lea首先介绍了网络服务的可扩展性目标,包括在增加负载(即更多客户端)的情况下优雅地降级(graceful degradation),以及在资源(如CPU、内存、磁盘和带宽)增加时持续改进性能。...

    Functional Programming in C++

    Mastering the functional style of programming can help you tackle the demands of modern apps and will lead to simpler expression of complex program logic, graceful error handling, and elegant ...

    javaAJAX无刷技术

    在实际开发中,为了兼容各种浏览器和提升用户体验,开发者通常会结合使用AJAX和其他技术,例如使用渐进增强(Progressive Enhancement)或优雅降级(Graceful Degradation)策略,确保即使在JavaScript禁用或不支持...

    RFC8538 Notification Message Support for BGP Graceful Restart

    **BGP Graceful Restart**(优雅重启)是一种使边界网关协议(BGP)能够在路由器重启时保持部分连接状态的方法,从而减少对网络的影响。在**RFC4724**中定义了这一机制,但它限制了BGP优雅重启的应用范围,即不包括...

    Scalable IO in Java.pdf

    在讨论可伸缩性目标时,文档强调了在增加负载时的优雅退化(Graceful degradation),即在用户数量增加时,系统能够合理地使用增加的资源(CPU、内存、磁盘、带宽)来提升性能。同时,系统应当满足可用性与性能目标...

    前端开源库-graceful-fs-extra

    `graceful-fs-extra`是一个针对Node.js环境的`fs`模块扩展库,它在原生`fs`模块的基础上增加了一些实用功能,并提供了更优雅的错误处理机制,使得文件操作更加高效和稳定。本文将深入探讨`graceful-fs-extra`库的...

    go-graceful-restart-example, 具有优雅重启功能的服务器示例.zip

    go-graceful-restart-example, 具有优雅重启功能的服务器示例 服务器使用 Go graceful重新启动安装并运行服务器$ go get github.com/Scalingo/go-graceful-restart-example$ go-graceful-restart-examp

    BGP Graceful Restart

    【BGP Graceful Restart】是BGP(Border Gateway Protocol)的一种特性,旨在确保在路由器或协议处理组件(如Route Processor,RP)重启时,路由信息的连续性和稳定性,避免网络中断。这一特性允许BGP Speaker...

Global site tag (gtag.js) - Google Analytics