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;http://www.huiyi8.com/moban/html模板
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("[email protected]"));
// System.out.println(MatchMobile("13555655606"));
//网上摘的几个身份证
System.out.println(IdCardNo("420101198001300053"));
System.out.println(IdCardNo("430911800709422"));
System.out.println(IdCardNo("430903198007094228"));

}

}

java的几种验证

时间: 2024-09-28 23:11:53

java的几种验证的相关文章

Java的23种设计模式(转)

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因

Oracle数据库的三种验证机制

关于超级管理员登陆不需要密码因为: 数据库的三种验证机制: 操作系统验证(具有sysdba和sysopera的用户) 密码文件验证(具有sysdba和sysopera的用户) 数据库验证(普通用户) 因为不需要密码是不安全的,所以一般在计算机管理中的用户组ora_dba把Administrator删除,删除之后就要输入密码了. 启动监听:lsnrctl start 查看监听:lsnrctl status 停止监听:lsnrctl stop 1.oracle 数据服务器包括:实例进程和数据库:  

Java中13种设计模式汇总

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

两步验证杀手锏:Java 接入 Google 身份验证器实战

两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登录进行两步验证,和苹果的两步验证是同样的道理.只不过 Google 的身份验证器用得更多更广泛,如 GitHub 的两步验证都是基于 Google 身份验证器. Google Authenticator 简介 Google Authenticator 身份验证器是一款基于时间与哈希的一次性密码算法的

Oracle基础学习2--Oracle登录与三种验证机制

首先,Oracle安装完毕有三个默认用户 ?  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 ?  System:数据库管理员,password为manager ?  Scott:一个普通用户,password为tiger 再看连接Oracle的三种验证机制 ?  操作系统验证(具体解释见以下) ?  password文件验证 ?  数据库验证 注:前两者适用于系统用户,比方:Sys.System等:最后一个适用于普通用户.比方:Scott. 再看Ora

ASP.NET MVC下的四种验证编程方式[续篇]

在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注ValidationAttribute特性"."让数据类型实现IValidatableObject或者IDataErrorInfo"),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事. 一.ModelValidator与ModelVal

java线程五种状态

java线程五种状态: 创建 -> 就绪 -> 运行 -> 销毁 创建 -> 就绪 -> 运行 -> 等待(缺少资源) -> 销毁 下图:各种状态转换

java String 两种不同的赋值 比较

原文http://blog.163.com/[email protected]/blog/static/1271436362012101214031911/ 在此感谢博主写出这么优秀的文章. 首先明确一点,String是一个类.下面我们主要讨论两个问题  a) String类的对象的两种赋值方式  b) 为什么String类的对象可以直接赋值  a) 1 类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧