最近项目中遇到验证银行卡号的问题,就查了一下,也总结总结,后期如果发现其他信息验证的会补上的。
1.验证输入的身份证号是否正确
public static boolean isLegalId(String id) {
if (id.toUpperCase().matches("(^\\d{15}$)|(^\\d{17}([0-9]|X)$)")) {
return true;
} else {
ToastUtil.show("输入的身份证号不合法");
return false;
}
}
2.验证输入的手机号是否正确
public static boolean isMobileNO(String mobiles) {
Pattern p = Pattern
.compile("^((13[0-9])|(15[^4,\\D])|(18[0,3,5-9]))\\d{8}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
现在又添加了一些手机号,上面的正则表达式验证不通过,可以把权限全打开如下:
"^1[0-9]{10}$"
3. 验证输入的邮箱是否正确
public static boolean checkEmail(String email) {
boolean flag = false;
try {
String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(check);
Matcher matcher = regex.matcher(email);
flag = matcher.matches();
} catch (Exception e) {
flag = false;
}
return flag;
}
4. 验证输入的名字是否为“中文”或者是否包含“.”
public static boolean isLegalName(String name, String hint) {
if (name.contains("·") || name.contains("•")) {
if (name.matches("^[\\u4e00-\\u9fa5]+[·•][\\u4e00-\\u9fa5]+$")) {
return true;
} else {
ToastUtil.show(hint);
return false;
}
} else {
if (name.matches("^[\\u4e00-\\u9fa5]+$")) {
return true;
} else {
ToastUtil.show(hint);
return false;
}
}
}
5.验证输入的银行卡号是否正确
//验证银行卡号
public static boolean checkBankCard(String cardId) {
char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
if (bit == 'N') {
return false;
}
return cardId.charAt(cardId.length() - 1) == bit;
}
//从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
public static char getBankCardCheckCode(String nonCheckCodeCardId) {
if (nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
|| !nonCheckCodeCardId.matches("\\d+")) {
//如果传的不是数据返回N
return 'N';
}
char[] chs = nonCheckCodeCardId.trim().toCharArray();
int luhmSum = 0;
for (int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
int k = chs[i] - '0';
if (j % 2 == 0) {
k *= 2;
k = k / 10 + k % 10;
}
luhmSum += k;
}
return (luhmSum % 10 == 0) ? '0' : (char) ((10 - luhmSum % 10) + '0');
}