一、验证汉字的正則表達式
/** 是否是汉字的正则 */
private String regexIsHanZi = "[\\u4e00-\\u9fa5]+";
* @param str要匹配的字符串
* @param reg 正则
public static boolean matchRegular(String str, String reg) {
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(str);
return matcher.matches();
}
二、验证身份证号码本以为简单写个正則表達式就OK了。
/** 匹配身份证号位数的正则 */
String regxId = "([0-9]{17}([0-9]|X))|([0-9]{15})";
原来还有更精确的规则匹配例如以下,网上学习的,备份使用了。
尊重别人劳动成果,原文:http://blog.csdn.net/suncaoyong/article/details/8647037
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 验证身份证号码 身份证号码, 能够解析身份证号码的各个字段,以及验证身份证号码是否有效; 身份证号码构成:6位地址编码+8位生日+3位顺序码+1位校验码
*
* @ClassName: CheckIdCard
* @Description:
* @author 刘昭
* @date 2013-1-4 上午11:06:09
*
*/
public class CheckId {
private String cardNumber; // 完整的身份证号码
private Boolean cacheValidateResult = null; // 缓存身份证是否有效,由于验证有效性使用频繁且计算复杂
private Date cacheBirthDate = null; // 缓存出生日期,由于出生日期使用频繁且计算复杂
private final static String BIRTH_DATE_FORMAT = "yyyyMMdd"; // 身份证号码中的出生日期的格式
private final static Date MINIMAL_BIRTH_DATE = new Date(-2209017600000L); // 身份证的最小出生日期,1900年1月1日
private final static int NEW_CARD_NUMBER_LENGTH = 18;
private final static int OLD_CARD_NUMBER_LENGTH = 15;
private final static char[] VERIFY_CODE = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; // 18位身份证中最后一位校验码
private final static int[] VERIFY_CODE_WEIGHT = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };// 18位身份证中,各个数字的生成校验码时的权值
/**
* @Description:false错误。true正确
* @return
* @author: LiuZhao
* @date:2014年11月18日
*/
public boolean validate() {
if (null == cacheValidateResult) {
boolean result = true;
result = result && (null != cardNumber); // 身份证号不能为空
result = result && NEW_CARD_NUMBER_LENGTH == cardNumber.length(); // 身份证号长度是18(新证)
// 身份证号的前17位必须是阿拉伯数字
for (int i = 0; result && i < NEW_CARD_NUMBER_LENGTH - 1; i++) {
char ch = cardNumber.charAt(i);
result = result && ch >= '0' && ch |