java&javaScript常見校驗器
阿新 • • 發佈:2018-12-29
身份證號校驗:
- java 實現
package validator;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.regex.Pattern;
/**
1.
2. <p>Title: 身份證合法性校驗</p>
3. <p>Description:
4. --15位身份證號碼:第7、8位為出生年份(兩位數),第9、10位為出生月份,第11、12位代表出生日期,第15位代表性別,奇數為男,偶數為女。
5. --18位身份證號碼
6. :第7、8、9、10位為出生年份(四位數),第11、第12位為出生月份,第13、14位代表出生日期,第17位代表性別,奇數為男,偶數為女。
7. <p>
8. 判斷18位身份證的合法性
9. 根據〖中華人民共和國國家標準GB11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。
10. 排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
11. <p>
12. 順序碼: 表示在同一地址碼所標識的區域範圍內,對同年、同月、同 日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配 給女性。
13. <p>
14. 1.前1、2位數字表示:所在省份的程式碼; 2.第3、4位數字表示:所在城市的程式碼; 3.第5、6位數字表示:所在區縣的程式碼;
15. 4.第7~14位數字表示:出生年、月、日; 5.第15、16位數字表示:所在地的派出所的程式碼; 6.第17位數字表示性別:奇數表示男性,偶數表示女性;
16. 7.第18位數字是校檢碼:也有的說是個人資訊碼,一般是隨計算機的隨機產生,用來檢驗身份證的正確性。校檢碼可以是0~9的數字,有時也用x表示。
17. <p>
18. 第十八位數字(校驗碼)的計算方法為: 1.將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7 9 10 5 8 4 2 1
19. 6 3 7 9 10 5 8 4 2
20. <p>
21. 2.將這17位數字和係數相乘的結果相加。
22. <p>
23. 3.用加出來和除以11,看餘數是多少?
24. 4.餘數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最後一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2。
25. <p>
26. 5.通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,身份證的最後一位號碼就是2。
27.
28. </p>
29. <p>Copyright: 1.0</p>
30. <p>Company: suntek</p>
31. @author 何曉鋒
32. @version 1.0
33. */
@SuppressWarnings({ "unchecked", "unused", "all" })
public class IDCardValidator {
/**
* 省,直轄市程式碼表: { 11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",
* 21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",
* 33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",
* 42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",
* 51:"四川",52:"貴州",53:"雲南",54:"西藏",61:"陝西",62:"甘肅",
* 63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}
*/
private final static String codeAndCity[][] = { { "11", "北京" },
{ "12", "天津" }, { "13", "河北" }, { "14", "山西" }, { "15", "內蒙古" },
{ "21", "遼寧" }, { "22", "吉林" }, { "23", "黑龍江" }, { "31", "上海" },
{ "32", "江蘇" }, { "33", "浙江" }, { "34", "安徽" }, { "35", "福建" },
{ "36" , "江西" }, { "37", "山東" }, { "41", "河南" }, { "42", "湖北" },
{ "43", "湖南" }, { "44", "廣東" }, { "45", "廣西" }, { "46", "海南" },
{ "50", "重慶" }, { "51", "四川" }, { "52", "貴州" }, { "53", "雲南" },
{ "54", "西藏" }, { "61", "陝西" }, { "62", "甘肅" }, { "63", "青海" },
{ "64", "寧夏" }, { "65", "新疆" }, { "71", "臺灣" }, { "81", "香港" },
{ "82", "澳門" }, { "91", "國外" } };
private final static String cityCode[] = { "11", "12", "13", "14", "15",
"21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41",
"42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61",
"62", "63", "64", "65", "71", "81", "82", "91" };
// 每位加權因子
private final static int power[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
10, 5, 8, 4, 2 };
/**
* 驗證身份證輸入是否合法
*
* @param idcard
* 身份證號碼,支援15位和18位
* @return true:合法 false:不合法
*/
public static boolean isValidatedIdcard(String idcard) {
if (isIdcard(idcard)) {
if (idcard.length() == 15) {
idcard = convertIdcarBy15bit(idcard);
}
return isValidate18Idcard(idcard);
} else {
return false;
}
}
private static boolean isValidate18Idcard(String idcard) {
// 非18位為假
if (idcard.length() != 18) {
return false;
}
// 獲取前17位
String idcard17 = idcard.substring(0, 17);
// 獲取第18位
String idcard18Code = idcard.substring(17, 18);
String checkCode = getCheckCode(idcard17);
if (null == checkCode) {
return false;
}
// 將身份證的第18位與算出來的校碼進行匹配,不相等就為假
if (!idcard18Code.equalsIgnoreCase(checkCode)) {
return false;
}
return true;
}
/**
* 驗證15位身份證的合法性,該方法驗證不準確,最好是將15轉為18位後再判斷,該類中已提供。
*
* @param idcard
* @return
*/
private boolean isValidate15Idcard(String idcard) {
// 非15位為假
if (idcard.length() != 15) {
return false;
}
// 是否全都為數字
if (isDigital(idcard)) {
String provinceid = idcard.substring(0, 2);
String birthday = idcard.substring(6, 12);
int year = Integer.parseInt(idcard.substring(6, 8));
int month = Integer.parseInt(idcard.substring(8, 10));
int day = Integer.parseInt(idcard.substring(10, 12));
// 判斷是否為合法的省份
boolean flag = false;
for (String id : cityCode) {
if (id.equals(provinceid)) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
// 判斷是否為合法的省份
Date birthdate = null;
try {
birthdate = new SimpleDateFormat("yyMMdd", Locale.getDefault())
.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
if (birthdate == null || new Date().before(birthdate)) {
return false;
}
// 判斷是否為合法的省份
GregorianCalendar curDay = new GregorianCalendar();
int curYear = curDay.get(Calendar.YEAR);
int year2bit = Integer.parseInt(String.valueOf(curYear)
.substring(2));
// 判斷該年份的兩位表示法,小於50的和大於當前年份的,為假
if ((year < 50 && year > year2bit)) {
return false;
}
// 判斷是否為合法的月份
if (month < 1 || month > 12) {
return false;
}
// 判斷是否為合法的日期
boolean mflag = false;
curDay.setTime(birthdate); // 判斷是否為合法的日期
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
mflag = (day >= 1 && day <= 31);
break;
case 2:// 判斷是否為合法的日期
if (curDay.isLeapYear(curDay.get(Calendar.YEAR))) {
mflag = (day >= 1 && day <= 29);
} else {
mflag = (day >= 1 && day <= 28);
}
break;
case 4:
case 6:
case 9:
case 11:
mflag = (day >= 1 && day <= 30);
break;
}
if (!mflag) {
return false;
}
} else {
return false;
}
return true;
}
/**
* 將15位的身份證轉成18位身份證
*
* @param idcard
* 需要轉換的15位身份證號
* @return 轉換後的18位身份證號碼,如果為null,表示轉換失敗
*/
public static String convertIdcarBy15bit(String idcard) {
String idcard17 = null;
// 獲取出生年月日
String birthday = idcard.substring(6, 12);
// 下面是判斷新增哪一年
Date birthdate = null;
try {
birthdate = new SimpleDateFormat("yyMMdd", Locale.getDefault())
.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
Calendar cday = Calendar.getInstance();
cday.setTime(birthdate);
String year = String.valueOf(cday.get(Calendar.YEAR));
idcard17 = idcard.substring(0, 6) + year + idcard.substring(8);
String checkCode = getCheckCode(idcard17);
// 獲取和值與11取模得到餘數進行校驗碼
idcard17 += checkCode;
return idcard17;
}
public static String getCheckCode(String idcard) {
int bit[] = converToInt(idcard);
int sum17 = getPowerSum(bit);
// 獲取和值與11取模得到餘數進行校驗碼
return getCheckCodeBySum(sum17);
}
/**
* 15位和18位身份證號碼的基本數字和位數驗校
*
* @param idcard
* @return
*/
private static boolean isIdcard(String idcard) {
return idcard == null || "".equals(idcard) ? false : Pattern.matches(
"(^\\d{15}$)|(\\d{17}(?:\\d|x|X)$)", idcard);
}
/**
* 數字驗證
*
* @param str
* @return
*/
private static boolean isDigital(String str) {
return str == null || "".equals(str) ? false : str.matches("^[0-9]*$");
}
/**
* 數字驗證
*
* @param str
* @return
*/
private static int getPowerSum(int[] bit) {
int sum = 0;
if (power.length != bit.length) {
return sum;
}
for (int i = 0; i < bit.length; i++) {
sum = sum + bit[i] * power[i];
}
return sum;
}
private final static String sum_checkCode[] = {
"1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2", };
/**
* 將和值與11取模得到餘數進行校驗碼判斷
*
* @param checkCode
* @param sum17
* @return 校驗位
*/
private static String getCheckCodeBySum(int sum17) {
return sum_checkCode[sum17 % 11];
}
/**
* 將和值與11取模得到餘數進行校驗碼判斷
*
* @param checkCode
* @param sum17
* @return 校驗位
*/
private static int[] converToInt(String c) throws NumberFormatException {
int[] a = new int[c.length()];
int k = 0;
for (int i = 0; i < c.length(); i++) {
a[k++] = Integer.parseInt(String.valueOf(c.charAt(i)));
}
return a;
}
/**
* 獲得18年後的日期
*
* @param date
* 指定日期
* @param year
* 新增年份
*/
private static Date after18Year(Date date, int year) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date.getTime());
int currenYear = calendar.get(Calendar.YEAR);
calendar.set(Calendar.YEAR, currenYear+year);
return new Date(calendar.getTimeInMillis());
}
/**
* 判斷輸入的身份證號碼是否是成年人
*
* @param idcard
* @return
*/
public static boolean isAdult(String idcard) {
if (idcard.length() == 15) {
idcard = convertIdcarBy15bit(idcard);
}
// 獲取出生日期
String birthday = idcard.substring(6, 14);
Date birthdate = null;
try {
birthdate = new SimpleDateFormat("yyyyMMdd", Locale.getDefault())
.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
Date curr = new Date();
Date dateAdd18 = after18Year(birthdate, 18);
if (dateAdd18.getTime() < curr.getTime()) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
String card = "370687200503344977";
System.out.println(IDCardValidator.isValidatedIdcard(card));
System.out.println(IDCardValidator.isAdult(card));
}
}
- javaScript 實現
var vcity = {
11 : "北京",
12 : "天津",
13 : "河北",
14 : "山西",
15 : "內蒙古",
21 : "遼寧",
22 : "吉林",
23 : "黑龍江",
31 : "上海",
32 : "江蘇",
33 : "浙江",
34 : "安徽",
35 : "福建",
36 : "江西",
37 : "山東",
41 : "河南",
42 : "湖北",
43 : "湖南",
44 : "廣東",
45 : "廣西",
46 : "海南",
50 : "重慶",
51 : "四川",
52 : "貴州",
53 : "雲南",
54 : "西藏",
61 : "陝西",
62 : "甘肅",
63 : "青海",
64 : "寧夏",
65 : "新疆",
71 : "臺灣",
81 : "香港",
82 : "澳門",
91 : "國外"
};
checkIDCard = function(card) {
// 是否為空
if (card === '') {
alert('請輸入身份證號,身份證號不能為空');
return false;
}
// 校驗長度,型別
if (isCardNo(card) === false) {
alert('您輸入的身份證號碼不正確,請重新輸入');
return false;
}
// 檢查省份
if (checkProvince(card) === false) {
alert('您輸入的身份證號碼不正確,請重新輸入');
return false;
}
// 校驗生日
if (checkBirthday(card) === false) {
alert('您輸入的身份證號碼生日不正確,請重新輸入');
return false;
}
// 檢驗位的檢測
if (checkParity(card) === false) {
alert('您的身份證校驗位不正確,請重新輸入');
return false;
}
return true;
}
// 檢查號碼是否符合規範,包括長度,型別
isCardNo = function(card) {
// 身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最後一位是校驗位,可能為數字或字元X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if (reg.test(card) === false) {
return false;
}
return true;
};
// 取身份證前兩位,校驗省份
checkProvince = function(card) {
var province = card.substr(0, 2);
if (vcity[province] == undefined) {
return false;
}
return true;
};
// 檢查生日是否正確
checkBirthday = function(card) {
var len = card.length;
// 身份證15位時,次序為省(3位)市(3位)年(2位)月(2位)日(2位)校驗位(3位),皆為數字
if (len == '15') {
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19' + year + '/' + month + '/' + day);
return verifyBirthday('19' + year, month, day, birthday);
}
// 身份證18位時,次序為省(3位)市(3位)年(4位)月(2位)日(2位)校驗位(4位),校驗位末尾可能為X
if (len == '18') {
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year + '/' + month + '/' + day);
return verifyBirthday(year, month, day, birthday);
}
return false;
};
// 校驗日期
verifyBirthday = function(year, month, day, birthday) {
var now = new Date();
var now_year = now.getFullYear();
// 年月日是否合理
if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month
&& birthday.getDate() == day) {
// 判斷年份的範圍(3歲到100歲之間)
var time = now_year - year;
if (time >= 3 && time <= 100) {
return true;
}
return false;
}
return false;
};
// 校驗位的檢測
checkParity = function(card) {
// 15位轉18位
card = changeFivteenToEighteen(card);
var len = card.length;
if (len == '18') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8,
4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3',
'2');
var cardTemp = 0, i, valnum;
for (i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1)) {
return true;
}
return false;
}
return false;
};
// 15位轉18位身份證號
changeFivteenToEighteen = function(card) {
if (card.length == '15') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8,
4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3',
'2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for (i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
};
電話校驗(行動電話或者固話):
- java 實現
package validator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* <p>Title: 電話或者手機號校驗器</p>
* <p>Description: </p>
* <p>Copyright: 1.0</p>
* <p>Company: suntek</p>
* @author 何曉鋒
* @version 1.0
*
*/
public class PhoneValidator {
/**
* 校驗電話號碼
* @param sPhone 被測字串
* @return 是電話號碼(固定或移動),返回true; 否則,返回false;
*/
public static boolean checkIsPhone(String sPhone) {
boolean iFlag1 = checkIsTel(sPhone);
boolean iFlag2 = checkIsMobile(sPhone);
if (true == iFlag1 || true == iFlag2) {
return true;
} else {
return false;
}
}
/**
* 校驗固話
* @param tel 被測字串
* @return 是固定電話,返回true; 否則,返回false;
*/
public static boolean checkIsTel(String tel) {
//三位區號的電話:可以帶括號,或者"-"
String regEx1 = "^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$";
//四位區號的電話:可以帶括號,或者"-"
String regEx2="^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$";
//不帶區號的七位,或八位固定電話使用者
String regEx3="^\\d{7}$|^\\d{8}$";
//四位區號的電話:可以帶括號,或者"-"
String regEx4="^\\(0\\d{3}\\)[- ]?\\d{8}$|^0\\d{3}[- ]?\\d{8}$";
boolean iFlag1=testRegEx(tel,regEx1);
boolean iFlag2=testRegEx(tel,regEx2);
boolean iFlag3=testRegEx(tel,regEx3);
boolean iFlag4=testRegEx(tel,regEx4);
if(true==iFlag1||true==iFlag2||true==iFlag3||true==iFlag4){
return true;
}else{
return false;
}
}
/**
* 校驗行動電話
* @param sMobile 被測字串
* @return 是行動電話,返回true; 否則,返回false;
*/
public static boolean checkIsMobile(String sMobile) {
// 13xxxxxxxxx號段
String regEx1 = "^0?13\\d{9}$";
// 15xxxxxxxxx號段
String regEx2 = "^0?15\\d{9}$";
// 182xxxxxxxx號段
String regEx3 = "^0?182\\d{8}$";
// 186xxxxxxxx號段
String regEx4 = "^0?186\\d{8}$";
// 187xxxxxxxx號段
String regEx5 = "^0?187\\d{8}$";
// 188xxxxxxxx號段
String regEx6 = "^0?188\\d{8}$";
// 189xxxxxxxx號段
String regEx7 = "^0?189\\d{8}$";
// 145xxxxxxxx號段
String regEx8 = "^0?145\\d{8}$";
// 147xxxxxxxx號段
String regEx9 = "^0?147\\d{8}$";
// 180xxxxxxxx號段
String regEx10 = "^0?180\\d{8}$";
boolean iFlag1 = testRegEx(sMobile, regEx1);
boolean iFlag2 = testRegEx(sMobile, regEx2);
boolean iFlag3 = testRegEx(sMobile, regEx3);
boolean iFlag4 = testRegEx(sMobile, regEx4);
boolean iFlag5 = testRegEx(sMobile, regEx5);
boolean iFlag6 = testRegEx(sMobile, regEx6);
boolean iFlag7 = testRegEx(sMobile, regEx7);
boolean iFlag8 = testRegEx(sMobile, regEx8);
boolean iFlag9 = testRegEx(sMobile, regEx9);
boolean iFlag10 = testRegEx(sMobile, regEx10);
if (true == iFlag1 || true == iFlag2 || true == iFlag3 || true == iFlag4 || true == iFlag5 || true == iFlag6
|| true == iFlag7 || true == iFlag8 || true == iFlag9 || true == iFlag10) {
return true;
} else {
return false;
}
}
/**
* 校驗正則
* @param tel
* @param regEx1
* @return
*/
private static boolean testRegEx(String tel, String regEx1) {
Pattern pattern = Pattern.compile(regEx1);
Matcher matcher = pattern.matcher(tel);
if (!matcher.matches()) {
return false;
} else {
return true;
}
}
}
- javaScript 實現
///////////////////////////////////////////////////
//////// 2007-12-15 laq 中國固定電話判斷
///////////////////////////////////////////////////
/**
*@param str : 被測字串
*@param regEx: 正則表示式
*return 匹配:返回true; 否則,返回false
*/
function testRegEx(str,regEx)
{
if(str.search(regEx)!=-1){
return true; //匹配
}else{
return false; //不匹配
}
}
/**
* @param sTel :被測字串
* return 是固定電話,返回true; 否則,返回false;
*
*/
function checkIsTel(sTel)
{
//三位區號的電話:可以帶括號,或者"-"
var regEx1= /^\(0\d{2}\)[- ]?\d{8}$|^0\d{2}[- ]?\d{8}$/;
//四位區號的電話:可以帶括號,或者"-"
var regEx2=/^\(0\d{3}\)[- ]?\d{7}$|^0\d{3}[- ]?\d{7}$/;
//不帶區號的七位,或八位固定電話使用者
var regEx3=/^\d{7}$|^\d{8}$/;
//四位區號的電話:可以帶括號,或者"-"
var regEx4=/^\(0\d{3}\)[- ]?\d{8}$|^0\d{3}[- ]?\d{8}$/;
var iFlag1=testRegEx(sTel,regEx1);
var iFlag2=testRegEx(sTel,regEx2);
var iFlag3=testRegEx(sTel,regEx3);
var iFlag4=testRegEx(sTel,regEx4);
if(true==iFlag1||true==iFlag2||true==iFlag3||true==iFlag4){
return true;
}else{
return false;
}
}
/**
* @param sMobile :被測字串
* return 是行動電話,返回true; 否則,返回false;
*
*/
function checkIsMobile(sMobile)
{
//13xxxxxxxxx號段
var regEx1=/^0?13\d{9}$/ ;
//15xxxxxxxxx號段
var regEx2=/^0?15\d{9}$/ ;
//182xxxxxxxx號段
var regEx3=/^0?182\d{8}$/ ;
//186xxxxxxxx號段
var regEx4=/^0?186\d{8}$/ ;
//187xxxxxxxx號段
var regEx5=/^0?187\d{8}$/ ;
//188xxxxxxxx號段
var regEx6=/^0?188\d{8}$/ ;
//189xxxxxxxx號段
var regEx7=/^0?189\d{8}$/ ;
//145xxxxxxxx號段
var regEx8=/^0?145\d{8}$/ ;
//147xxxxxxxx號段
var regEx9=/^0?147\d{8}$/ ;
//180xxxxxxxx號段
var regEx10=/^0?180\d{8}$/ ;
var iFlag1=testRegEx(sMobile,regEx1);
var iFlag2=testRegEx(sMobile,regEx2);
var iFlag3=testRegEx(sMobile,regEx3);
var iFlag4=testRegEx(sMobile,regEx4);
var iFlag5=testRegEx(sMobile,regEx5);
var iFlag6=testRegEx(sMobile,regEx6);
var iFlag7=testRegEx(sMobile,regEx7);
var iFlag8=testRegEx(sMobile,regEx8);
var iFlag9=testRegEx(sMobile,regEx9);
var iFlag10=testRegEx(sMobile,regEx10);
if(true==iFlag1||true==iFlag2||true==iFlag3||true==iFlag4||true==iFlag5||true==iFlag6||true==iFlag7||true==iFlag8||true==iFlag9||true==iFlag10){
return true;
}else{
return false;
}
}
/**
* @param sPhone :被測字串
* return 是電話號碼(固定或移動),返回true; 否則,返回false;
*/
function checkIsPhone(sPhone)
{
var iFlag1=checkIsTel(sPhone);
var iFlag2=checkIsMobile(sPhone);
if(true==iFlag1||true==iFlag2){
return true;
}else{
return false;
}
}
車牌號校驗:
- java 實現
package validator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* <p>Title: 車牌號校驗器</p>
* <p>Description:
* 1.常規車牌號:僅允許以漢字開頭,後面可錄入六個字元,由大寫英文字母和阿拉伯數字組成。如:粵B12345;<br>
* 2.武警車牌:允許前兩位為大寫英文字母,後面可錄入七個字元,由大寫英文字母和阿拉伯數字組成,其中第三位可錄漢字也可錄大寫英文字母及阿拉伯數字,如:WJ01警0081、WJ0112345。<br>
* 3.最後一個為漢字的車牌:允許以漢字開頭,後面可錄入六個字元,前五位字元,由大寫英文字母和阿拉伯數字組成,而最後一個字元為漢字,漢字包括“掛”、“學”、“警”、“軍”、“港”、“澳”。如:粵Z1234港。<br>
* 4.新軍車牌:以兩位為大寫英文字母開頭,後面以5位阿拉伯數字組成。如:BA12345。 5.黑龍江車牌存在08或38開頭的情況<br>
* </p>
* <p>Copyright: 1.0</p>
* <p>Company: suntek</p>
*
* @author 何曉鋒
* @version 1.0
*
*/
public class LicensePlateNumValidator {
//final static String REGX = "^[\\u4e00-\\u9fa5|WJ]{1}[A-Z0-9]{6}$";
final static String REGX = "(^[\\u4E00-\\u9FA5]{1}[A-Z0-9]{6}$)|(^[A-Z]{2}[A-Z0-9]{2}[A-Z0-9\\u4E00-\\u9FA5]{1}[A-Z0-9]{4}$)|(^[\\u4E00-\\u9FA5]{1}[A-Z0-9]{5}[掛學警軍港澳]{1}$)|(^[A-Z]{2}[0-9]{5}$)|(^(08|38){1}[A-Z0-9]{4}[A-Z0-9掛學警軍港澳]{1}$)";
public static boolean checkLicensePlateNum(String num) {
Pattern pattern = Pattern.compile(REGX);
Matcher matcher = pattern.matcher(num);
if (!matcher.matches()) {
return false;
} else {
return true;
}
}
public static void main(String[] args) {
System.out.println(checkLicensePlateNum("粵A10988"));
}
}
車架號VIN碼校驗:
package validator;
/**
*
* <p>
* Title: 車架碼校驗器
* </p>
* <p>
* Description:
* 計算方法:<br>
* VIN碼從從第一位開始,碼數字的對應值×該位的加權值,計算全部17位的乘積值相加除以11,所得的餘數,即為第九位校驗值 例子:<br>
* 車輛識別碼:UU6JA69691D713820第九位為9為校驗碼,我們可以驗證下是否正確。<br>
* 4×8+4×7+6×6+1×5+1×4+6×3+9×2+6×10+1×9+4×8+7×7+1×6+3×5+8×4+2×3+0×0 = 350<br>
* 350除以11,得31,餘9,該餘數9即為校驗碼,和識別碼的校驗位相同。如果餘數為10,則檢驗位為字母“X”<br>
*
* </p>
* <p>
* Copyright: 1.0
* </p>
* <p>
* Company: suntek
* </p>
*
* @author 何曉鋒
* @version 1.0
*
*/
public class VINValidator {
static