`
liyinfeng56
  • 浏览: 94057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 验证工具类

 
阅读更多
package com.cn.wangk.util;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

// 网站域名 联系电话 手机号码 邮政编码 邮箱
public class Validation {
	private static Logger logger = Logger.getLogger(Validation.class);
	/**
	 * 正则验证方法
	 * 
	 * @param regexstr
	 * @param str
	 * @return
	 */
	public static boolean Match(String regexstr, String str) {
		Pattern regex = Pattern.compile(regexstr,Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
		Matcher matcher = regex.matcher(str);
		return matcher.matches();
	}

	/**
	 * 邮箱验证
	 * 
	 * @param mail
	 * @return
	 */
	public static boolean MatchMail(String mail) {
		String mailregex = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
		return Match(mailregex, mail);
	}

	/**
	 * 手机验证
	 * 
	 * @param mobile
	 * @return
	 */
	public static boolean MatchMobile(String mobile) {
		String mobileregex = "^(13[4,5,6,7,8,9]|15[0,8,9,1,7]|188|187)\\d{8}$";
		return Match(mobileregex, mobile);
	}

	/**
	 * 电话验证
	 * 
	 * @param Tel
	 * @return
	 */
	public static boolean MatchTel(String Tel) {
		String telregex = "(^[0-9]{3,4}-[0-9]{7,8}-[0-9]{3,4}$)|(^[0-9]{3,4}-[0-9]{7,8}$)|(^[0-9]{7,8}-[0-9]{3,4}$)|(^[0-9]{7,15}$)";
		return Match(telregex, Tel);
	}

	public static boolean Webdomain(String webdomain) {
		String webdomainregex = "http://([^/]+)/*";
		return Match(webdomainregex, webdomain);
	}

	public static boolean ZipCode(String zipcode) {
		String zipcoderegex = "^[0-9]{6}$";
		return Match(zipcoderegex, zipcode);
	}

	public static boolean IdCardNo(String idcard) {
		HashMap<Integer, String> area = new HashMap<Integer, String>();
		area.put(11, "北京");
		area.put(12, "天津");
		area.put(13, "河北");
		area.put(14, "山西");
		area.put(15, "内蒙古");
		area.put(21, "辽宁");
		area.put(22, "吉林");
		area.put(23, "黑龙江");
		area.put(31, "上海");
		area.put(32, "江苏");
		area.put(33, "浙江");
		area.put(34, "安徽");
		area.put(35, "福建");
		area.put(36, "江西");
		area.put(37, "山东");
		area.put(41, "河南");
		area.put(42, "湖北");
		area.put(43, "湖南");
		area.put(44, "广东");
		area.put(45, "广西");
		area.put(46, "海南");
		area.put(50, "重庆");
		area.put(51, "四川");
		area.put(52, "贵州");
		area.put(53, "云南");
		area.put(54, "西藏");
		area.put(61, "陕西");
		area.put(62, "甘肃");
		area.put(63, "青海");
		area.put(64, "宁夏");
		area.put(65, "新疆");
		area.put(71, "台湾");
		area.put(81, "香港");
		area.put(82, "澳门");
		area.put(91, "国外");
		if(StringUtils.isBlank(idcard)) return false;
		logger.info("身份证所在地:"+area.get(Integer.parseInt(idcard.substring(0, 2))));
		if(area.get(Integer.parseInt(idcard.substring(0, 2)))==null) return false;
		if(!(idcard.length()==15||idcard.length()==18)) return false;
		if(idcard.length()==15){
			//老身份证
			int year = Integer.parseInt(idcard.substring(2,6))+1900;
			String ereg;
			if (year % 4 == 0||(year% 100 == 0 &&year % 4 == 0 )){
				ereg="^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$";//测试出生日期的合法性
			 }else{
				 ereg="^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$";//测试出生日期的合法性
			 }
			 if(Match(ereg, idcard)) 
				 return true;
			 else 
				 return false;
			 
		}else if(idcard.length()==18){
			//新省份证
			 //18位身份号码检测
			 //出生日期的合法性检查
			 //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
			 //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
			int year = Integer.parseInt(idcard.substring(2,6))+1900;
			String ereg;
			 if (year % 4 == 0 ||(year % 100 == 0 && year%4 == 0 )){
				 ereg="^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$";//闰年出生日期的合法性正则表达式
			 }else{
				 ereg="^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$";//平年出生日期的合法性正则表达式
			 }
			 if(Match(ereg, idcard)){//测试出生日期的合法性
			 //计算校验位
				 int[] idcards = new int[18];
				 for (int i = 0; i < idcard.length(); i++) {
					idcards[i]=Integer.parseInt(idcard.substring(i, i+1));
				}
				 int S = (idcards[0] + idcards[10]) * 7
				 + (idcards[1] + idcards[11]) * 9
				 + (idcards[2] + idcards[12]) * 10
				 + (idcards[3] + idcards[13]) * 5
				 + (idcards[4] + idcards[14]) * 8
				 + (idcards[5] + idcards[15]) * 4
				 + (idcards[6] + idcards[16]) * 2
				 + idcards[7] * 1
				 + idcards[8] * 6
				 + idcards[9] * 3 ;
				 int Y = S % 11;
				 String M = "F";
				 String JYM = "10X98765432";
				 M = JYM.substring(Y,Y+1);//判断校验位
				 if(StringUtils.equalsIgnoreCase(M, String.valueOf(idcards[17])))
						 return true; //检测ID的校验位
				 else 
					 return false;
			 }
			 else 
				 return false;
		}
		return false;
	}

	public static void main(String[] args) {
		// 电子邮件
//		System.out.println(MatchMail("dffdfdf@qq.com"));
//		System.out.println(MatchMobile("13555655606"));
		//网上摘的几个身份证
		System.out.println(IdCardNo("420101198001300053"));
		System.out.println(IdCardNo("430911800709422")); 
		System.out.println(IdCardNo("430903198007094228"));

	}

}

分享到:
评论

相关推荐

    java验证工具类

    在这个Java开发的验证码工具类中,它提供了生成和验证验证码的功能,同时包含了文档说明和Spring MVC框架的集成示例。 验证码(CAPTCHA)的基本原理是生成一段随机的字符串或图像,用户需要正确输入才能完成相应的...

    一个 Java 验证 的工具类

    一个 Java 验证 的工具类 支持各种类型的验证 在项目中大量使用

    30个java工具类

    [工具类] 中文验证.jsp.txt [工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java [工具类] 通信服务端simpleServer.java [工具类] 框架StringUtil.java [工具类] 时间Time...

    【强2】30个java工具类

    [工具类] 中文验证.jsp.txt [工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java [工具类] 通信服务端simpleServer.java [工具类] 框架StringUtil.java [工具类] 时间Time...

    java mail工具类

    这个工具类的创建旨在简化邮件处理的复杂性,使开发者能够便捷地集成邮件功能。以下是对JavaMail工具类及其相关知识点的详细说明: 1. **JavaMail API**: JavaMail API 是Java平台上的标准邮件接口,提供了发送、...

    Java Https工具类,Java Https Post请求

    这个“Java Https工具类,Java Https Post请求”可能是一个自定义的类,用于简化发送HTTPS POST请求的过程。以下是对这个主题的详细讲解: 1. **HTTPS基础**: - HTTPS是在HTTP上添加了SSL/TLS(Secure Sockets ...

    常用的java工具类

    1.[工具类] 读取、打印输出、保存xml .java 2.[工具类] Java中计算任意两个日期之间的工作天数 .java 3.[工具类] MD5 .java 4.[工具类] 时间工具TimeUtil....10.[工具类] 中文验证.jsp ......... 等等20几个常用工具类.

    纯Java验证码工具类

    "纯Java验证码工具类" 提供了一种简便的方法来生成这种安全机制,无需依赖其他语言或库。这个工具类可以被轻松地集成到任何Java项目中,为你的应用程序添加一道防线。 验证码生成通常包括以下几个关键步骤: 1. **...

    java常用工具类

    在Java编程中,工具类(Util Classes)是包含各种实用方法的类,它们不持有状态,主要用于提供方便的静态方法。这些工具类极大地提升了代码的可读性和复用性。以下将详细介绍标题和描述中提到的一些关键工具类及其...

    Java实现的Https请求工具类

    本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...

    Https请求工具类,Java实现http请求,https请求

    本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https连接、如何实现Post请求、如何处理SSL验证等内容。 在Java中,使用HttpURLConnection类可以实现Http和Https请求,但是对于...

    java验证文件真实格式和编码格式工具类

    `java验证文件真实格式和编码格式工具类` 提供的功能对于处理不同来源的文件至关重要,尤其是在处理用户上传的文件或跨平台数据交换时。通过`VerifyFileType.java` 和 `VerifyFileEncoder.java`,开发者可以确保正确...

    java银行工具类java银行工具类

    根据银行卡号获取银行的名称 银行的机构号 银行卡的卡的类型 银行卡的卡种 工具类是由java 编写 其他的开发语言 也可以参考 包含了4800 +种卡种 自己测试了 还是比较全的 比支付宝提供的接口返回的卡种还要全 读取...

    Java发 Https请求工具类 支持SSL

    4. **Java HTTPS工具类**: 工具类封装了HTTPS请求的实现细节,包括证书管理、SSL上下文配置等,使得开发者无需深入了解底层实现即可方便地发送HTTPS请求。 5. **SSL配置**: 在Java中,为了支持SSL,需要设置`SSL...

    java sm2国密工具类

    Java SM2 国密工具类是用于实现中国国家商用密码算法SM2的编程工具,它在Java环境中提供了加密、解密、签名以及验签等安全功能。SM2算法是中国密码学的重要组成部分,主要用于保障数据传输的安全性和身份认证的可靠...

    java 调用 google 翻译工具类

    本篇文章将详细介绍如何在Java中使用Google翻译API,并提供一个可直接运行的工具类示例。 首先,我们需要了解Google翻译API的基本概念。Google Translate API是Google Cloud平台的一部分,它提供了RESTful接口,...

    java短信服务工具类

    工具类应支持生成和验证随机验证码,同时考虑防止恶意攻击和频繁发送。 11. **国际化与本地化**: 如果应用需要面向全球用户,工具类应考虑短信内容的国际化和本地化,支持多语言短信发送。 12. **延迟发送与定时...

    jaava和jsp工具类

    [工具类] 成各种密码随机串,加密解密,编码解码...[工具类] 中文验证 .jsp [工具类] CookieCounter .java [工具类] Java中计算任意两个日期之间的工作天数 .java [工具类] java抓取网页 .java [工具类] MD5 .java

    Java连接数据库的工具类

    本资源是java开发的常用工具类,包括01.DTD约束文档,02.Schema约束文档,c3p0,commons-dbutils-1.6,commons-io-2.4,commons-pool-1.5.6,mysql-connector-java-5.1.37

Global site tag (gtag.js) - Google Analytics