个人学习总结,供大家参考,不足之处见谅。
提前补充一个用到的知识点
1、Character.getNumericValue(char ch)通常情况下,字符本身可以直接转化为数字值就直接转化。
2、如果该字符不有一个数字值,则返回-1。如果字符具有一个数字值,该值不能被表示为一个非负整数(例如,一个分数值),则返回-2,再将其转换成对应的ASCII码。
package test;
public class RegExUtils {
public static boolean idCard(String no){
// 对身份证号进行长度等简单判断
if (no == null || no.length() != 18 || !no.matches("\\d{17}[0-9X]"))
{
return false;
}
// 1-17位相乘因子数组
int[] factor = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 18位随机码数组
char[] random = "10X98765432".toCharArray();
// 计算1-17位与相应因子乘积之和
int total = 0;
for (int i = 0; i < 17; i++)
{
total += Character.getNumericValue(no.charAt(i)) * factor[i];
}
// 判断随机码是否相等
return random[total % 11] == no.charAt(17);
}
public static boolean checkEmail(String email)
{// 验证邮箱的正则表达式
String format = "\\p{Alpha}\\w{1,}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}";
//p{Alpha}:内容是必选的,和字母字符[\p{Lower}\p{Upper}]等价。如:200896@163.com不是合法的。
//w{2,15}: 2~15个[a-zA-Z_0-9]字符;w{}内容是必选的。 如:dyh@152.com是合法的。
//[a-z0-9]{3,}:至少三个[a-z0-9]字符,[]内的是必选的;如:dyh200896@16.com是不合法的。
//[.]:'.'号时必选的; 如:dyh200896@163com是不合法的。
//p{Lower}{2,}小写字母,两个以上。如:dyh200896@163.c是不合法的。
if (email.matches(format))
{
return true;// 邮箱名合法,返回true
}
else
{
return false;// 邮箱名不合法,返回false
}
}
public static void main(String[] args) throws Exception
{
// 正确
System.out.println(idCard("412824199501247719"));
// 错误
System.out.println(idCard("432831196411150812"));
String email = "ccky365@163.com"; // 需要进行验证的邮箱
if (checkEmail(email))// 验证邮箱
{
System.out.println(email+"\n是合法的邮箱名。");
}else
{
System.out.println(email+"\n不是合法的邮箱名。");
}
}
}