/** * 파일명 : validate.js * 목 적 : 공통함수 * 작성자 : 김석철 * 내 용 : */ /* [Function Category] A. 입력유효성 검사. [Function List] V-1. isValid 입력값의 유효성을 검사한다. V-2. isValidSize 입력값의 크기를 검사한다. V-3. isNumber 객체의 값이 숫자인지 검사한다. V-4. isKorean 객체의 값이 한글인지 검사한다. V-5. isAlphabet 객체의 값이 영문인지 검사한다. V-6. isAlphaNumeric 객체의 값이 영문 또는 숫자인지 검사한다. V-7. isSame 두 객체의 값이 동일한지 검사한다. V-8. isId 객체의 값이 아이디에 적합한지 검사한다. * - 아이디형식 : 영문, 숫자, _ 를 사용하여 5자이상 10자이하 V-9. isMail 객체의 값이 E-Mail에 적합한지 검사한다. V-10. isResno 객체의 값이 주민번호에 적합한지 검사한다. V-11. isResno2 객체의 값이 주민번호에 적합한지 검사한다. V-12. isPhone 객체의 값이 전화번호에 적합한지 검사한다. V-13. isPhone2 객체의 값이 전화번호에 적합한지 검사한다. V-14. isCellular 객체의 값이 휴대전화번호에 적합한지 검사한다. V-15. isCellular2 객체의 값이 휴대전화번호에 적합한지 검사한다. V-16. setCheckbox CHCKBOX를 모두 채크상태로 한다.. V-17. resetCheckbox CHCKBOX 객체를 모두 해제한다. V-18. reverseCheckbox CHCKBOX 객체를 모두 반전한다. V-19. isChecked CHCKBOX, RADIO 객체가 채크되었는지 검사한다. V-20. isValidYear 객체의 값이 연도에 적합한지 검사한다. V-21. isValidMonth 객체의 값이 월에 적합한지 검사한다. V-22. isValidDate 객체의 값이 일에 적합한지 검사한다. V-23. isValidDate2 객체의 값이 일에 적합한지 검사한다. V-24. isValidYearMonth 객체의 값이 연월에 적합한지 검사한다. V-25. isValidYearMonth2 객체의 값이 연월에 적합한지 검사한다. */ /** * V-1. 입력값의 유효성을 검사한다. * * @param obj 객체 ID * @param type 타입(K : 한글, A : 영문, AN : 영숫자 혼합) * @param min 최소 자리수 * @param max 최대 자리수 * @return 객체 이름 */ function isValid(obj, type, min, max) { if (type == "K") { if (!isKorean(obj)) { obj.focus(); return false; } } else if (type == "A") { if (!isAlphabet(obj)) { obj.focus(); return false; } } else if (type == "N") { if (!isNumber(obj)) { obj.focus(); return false; } } else if (type == "AN") { if (!isAlphaNumeric(obj)) { obj.focus(); return false; } } if (!isValidSize(obj, min, max)) { obj.focus(); return false; } return true; } /** * V-2. 입력값의 크기를 검사한다. * * @param obj 객체 ID * @param min 최소 자리수 * @param max 최대 자리수 * @return */ function isValidSize(obj, min, max) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); if (!(strlen(str) >= min && strlen(str) <= max)) { obj.focus(); return false; } return true; } /** * V-3. 객체의 값이 숫자인지 검사한다. * * @param obj 객체 ID * @return */ function isNumber(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); if (!(code >= 48 && code <= 57) && code != 44) { obj.focus(); return false; } } return true; } /** * V-4. 객체의 값이 한글인지 검사한다. * * @param obj 객체 ID * @return */ function isKorean(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); if (!(code > 255)) { obj.focus(); return false; } } return true; } /** * V-5. 객체의 값이 영문인지 검사한다. * * @param obj 객체 ID * @return */ function isAlphabet(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); if (!(code >= 65 && code <= 122)) { obj.focus(); return false; } } return true; } /** * V-6. 객체의 값이 영문 또는 숫자인지 검사한다. * * @param obj 객체 ID * @return */ function isAlphaNumeric(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); for (var i = 0; i < str.length; i++) { var code = str.charCodeAt(i); if (!(code >= 65 && code <= 122) && !(code >= 48 && code <= 57)) { obj.focus(); return false; } } return true; } /** * V-7. 두 객체의 값이 동일한지 검사한다. * * @param obj1 객체1 ID * @param obj2 객체2 ID * @return */ function isSame(obj1, obj2) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } var str1 = trim(obj1.value); var str2 = trim(obj2.value); if (str1 != str2) { obj1.focus(); return false; } return true; } /** * V-8. 객체의 값이 아이디에 적합한지 검사한다. * - 아이디형식 : 영문, 숫자, _ 를 사용하여 5자이상 10자이하 * * @param obj 객체 ID * @return */ function isId(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); if (!isValidSize(obj, 5, 10)) { obj.focus(); return false; } if (!isAlphaNumeric(obj)) { obj.focus(); return false; } return true; } /** * V-9. 객체의 값이 E-Mail에 적합한지 검사한다. * * @param obj 객체 ID * @return */ function isMail(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var i = str.indexOf("@"); if (i < 0) { obj.focus(); return false; } i = str.indexOf("."); if (i < 0) { obj.focus(); return false; } return true; } /** * V-10. 객체의 값이 주민번호에 적합한지 검사한다. * * @param obj1 객체1 ID * @param obj2 객체2 ID * @return */ function isResno(obj1, obj2) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } var str1 = obj1.value; var str2 = obj2.value; if (!ValidSize(str1, 6, 6)) { obj1.focus(); return false; } if (!ValidSize(str2, 7, 7)) { obj2.focus(); return false; } var hap = 0; for (var i = 0; i < 6; i++) { hap = hap + (str1.charAt(i) * (i + 2)); } var n1 = str2.charAt(0); var n2 = str2.charAt(1); var n3 = str2.charAt(2); var n4 = str2.charAt(3); var n5 = str2.charAt(4); var n6 = str2.charAt(5); var n7 = str2.charAt(6); hap += n1 * 8 + n2 * 9 + n3 * 2 + n4 * 3 + n5 * 4 + n6 * 5; hap %= 11; hap = 11 - hap; hap %= 10; if (hap != n7) { obj1.focus(); return false; } return true; } /** * V-11. 객체의 값이 주민번호에 적합한지 검사한다. * * @param obj1 객체 ID * @param sep 구분 문자 * @return */ function isResno2(obj, sep) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var arr = new Array(); arr = str.split(sep); if (arr.length != 2) { obj.focus(); return false; } if (!Number(arr[0])) { obj.focus(); return false; } if (!ValidSize(arr[0], 6, 6)) { obj.focus(); return false; } if (!Number(arr[1])) { obj.focus(); return false; } if (!ValidSize(arr[1], 7, 7)) { obj.focus(); return false; } var hap = 0; for (var i = 0; i < 6; i++) { hap = hap + (arr[0].charAt(i) * (i + 2)); } var n1 = arr[1].charAt(0); var n2 = arr[1].charAt(1); var n3 = arr[1].charAt(2); var n4 = arr[1].charAt(3); var n5 = arr[1].charAt(4); var n6 = arr[1].charAt(5); var n7 = arr[1].charAt(6); hap += n1 * 8 + n2 * 9 + n3 * 2 + n4 * 3 + n5 * 4 + n6 * 5; hap %= 11; hap = 11 - hap; hap %= 10; if (hap != n7) { obj.focus(); return false; } return true; } /** * V-12. 객체의 값이 전화번호에 적합한지 검사한다. * * @param obj1 객체1 ID * @param obj2 객체2 ID * @param obj3 객체3 ID * @return */ function isPhone(obj1, obj2, obj3) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } if (isNull(obj3.value)) { obj3.focus(); return false; } var str1 = trim(obj1.value); var str2 = trim(obj2.value); var str3 = trim(obj3.value); if (!isNumber(obj1) || !isValidSize(obj1, 2, 3)) { return false; } var ddd = ["02", "051", "053", "032", "062", "042", "052", "031", "033", "041", "043", "054", "055", "061", "063", "064"]; var flag = false; for (var i = 0; i < ddd.length; i++) { if (ddd[i] == str1) { flag = true; } } if (!flag) { obj1.focus(); return false; } if (!isNumber(obj2) || !isValidSize(obj2, 3, 4)) { obj2.focus(); return false; } if (!isNumber(obj3) || !isValidSize(obj3, 4, 4)) { obj3.focus(); return false; } return true; } /** * V-13. 객체의 값이 전화번호에 적합한지 검사한다. * * @param obj 객체 ID * @param sep 구분 문자 * @return */ function isPhone2(obj, sep) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var arr = new Array(); arr = str.split(sep); if (arr.length != 3) { obj.focus(); return false; } if (!Number(arr[0])) { obj.focus(); return false; } if (!ValidSize(arr[0], 2, 3)) { obj.focus(); return false; } var ddd = ["02", "051", "053", "032", "062", "042", "052", "031", "033", "041", "043", "054", "055", "061", "063", "064"]; var flag = false; for (var i = 0; i < ddd.length; i++) { if (ddd[i] == arr[0]) { flag = true; } } if (!flag) { obj.focus(); return false; } if (!Number(arr[1])) { obj.focus(); return false; } if (!ValidSize(arr[1], 3, 4)) { obj.focus(); return false; } if (!Number(arr[2])) { obj.focus(); return false; } if (!ValidSize(arr[2], 4, 4)) { obj.focus(); return false; } return true; } /** * V-14. 객체의 값이 휴대전화번호에 적합한지 검사한다. * * @param obj1 객체1 ID * @param obj2 객체2 ID * @param obj3 객체3 ID * @return */ function isCellular(obj1, obj2, obj3) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } if (isNull(obj3.value)) { obj3.focus(); return false; } var str1 = trim(obj1.value); var str2 = trim(obj2.value); var str3 = trim(obj3.value); if (!isNumber(obj1) || !isValidSize(obj1, 3, 3)) { obj1.focus(); return false; } var ddd = ["010", "011","016","017","018","019"]; var flag = false; for (var i = 0; i < ddd.length; i++) { if (ddd[i] == str1) { flag = true; } } if (!flag) { obj1.focus(); return false; } if (!isNumber(obj2) || !isValidSize(obj2, 3, 4)) { obj2.focus(); return false; } if (!isNumber(obj3) || !isValidSize(obj3, 4, 4)) { obj2.focus(); return false; } return true; } /** * V-15. 객체의 값이 휴대전화번호에 적합한지 검사한다. * * @param obj 객체 ID * @param sep 구분 문자 * @return */ function isCellular2(obj, sep) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var arr = new Array(); arr = str.split(sep); if (arr.length != 3) { obj.focus(); return false; } if (!Number(arr[0])) { obj.focus(); return false; } if (!ValidSize(arr[0], 3, 3)) { obj.focus(); return false; } var ddd = ["010", "011","016","017","018","019"]; var flag = false; for (var i = 0; i < ddd.length; i++) { if (ddd[i] == arr[0]) { flag = true; } } if (!flag) { obj.focus(); return false; } if (!Number(arr[1])) { obj.focus(); return false; } if (!ValidSize(arr[1], 3, 4)) { obj.focus(); return false; } if (!Number(arr[2])) { obj.focus(); return false; } if (!ValidSize(arr[2], 4, 4)) { obj.focus(); return false; } return true; } /** * V-16. CHCKBOX를 모두 채크상태로 한다.. * * @param obj 객체 ID * @return */ function setCheckbox(obj) { if (!isArray(obj)) return false; for (var i = 0; i < obj.length; i++) { obj[i].checked = true; } return true; } /** * V-17. CHCKBOX 객체를 모두 해제한다. * * @param obj 객체 ID * @return */ function resetCheckbox(obj) { if (!isArray(obj)) return false; for (var i = 0; i < obj.length; i++) { obj[i].checked = false; } return true; } /** * V-18. CHCKBOX 객체를 모두 반전한다. * * @param obj 객체 ID * @return */ function reverseCheckbox(obj) { if (!isArray(obj)) return false; for (var i = 0; i < obj.length; i++) { obj[i].checked = !obj[i].checked; /* if (obj[i].checked) obj[i].checked = false; else obj[i].checked = true; */ } return true; } /** * V-19. CHCKBOX, RADIO 객체가 채크되었는지 검사한다. * * @param obj 객체 ID * @return */ function isChecked(obj) { var flag = false; if (isArray(obj)) { for (i = 0; i < obj.length; i++) { if (obj[i].checked) { flag = true; break; } } } else { if (obj.checked) flag = true; } return flag; } /** * V-19. 객체의 값이 연도에 적합한지 검사한다. * * @param obj 객체 ID * @return */ function isValidYear(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = parseInt(trim(obj.value), 10); if (!isNumber(obj) || !(str >= 1900 && str <= 2100)) { obj.focus(); return false; } return true; } /** * V-20. 객체의 값이 월에 적합한지 검사한다. * * @param obj 객체 ID * @return */ function isValidMonth(obj) { if (isNull(obj.value)) { obj.focus(); return false; } var str = parseInt(trim(obj.value), 10); if (!isNumber(obj) || parseInt(str) > 12 || parseInt(str) < 1) { obj.focus(); return false; } if (str.length == 1) { str = "0" + str; } return true; } /** * V-21. 객체의 값이 일에 적합한지 검사한다. * * @param obj 객체1 ID * @param obj 객체2 ID * @param obj 객체3 ID * @return */ function isValidDate(obj1, obj2, obj3) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } if (isNull(obj3.value)) { obj3.focus(); return false; } var str1 = parseInt(trim(obj1.value), 10); var str2 = parseInt(trim(obj2.value), 10) - 1; var str3 = parseInt(trim(obj3.value), 10); if (!isValidYear(obj1)) { obj1.focus(); return false; } if (!isValidMonth(obj2)) { obj2.focus(); return false; } var endstr3 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ((str1 % 4 == 0 && str1 % 100 != 0) || str1 % 400 == 0) { endstr3[1] = 29; } if (!isNumber(obj3) || !(str3 >= 1 && str3 <= endstr3[str2])) { obj3.focus(); return false; } return true; } /** * V-22. 객체의 값이 일에 적합한지 검사한다. * * @param obj 객체 ID * @param sep 구분 문자 * @return */ function isValidDate2(obj, sep) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var arr = new Array(); arr = str.split(sep); if (sep.length == 0) { arr[0] = str.substring(0, 4); arr[1] = str.substring(4, 6); arr[2] = str.substring(6, 8); } else { if (arr.length != 3) { obj.focus(); return false; } } if (!ValidDate(arr[0], arr[1], arr[2])) { obj.focus(); return false; } if (arr[1].length == 1) { arr[1] = "0" + arr[1]; } if (arr[2].length == 1) { arr[2] = "0" + arr[2]; } return true; } /** * V-23. 객체의 값이 연월에 적합한지 검사한다. * * @param obj1 객체1 ID * @param obj2 객체2 ID * @return */ function isValidYearMonth(obj1, obj2) { if (isNull(obj1.value)) { obj1.focus(); return false; } if (isNull(obj2.value)) { obj2.focus(); return false; } var str1 = parseInt(trim(obj1.value), 10); var str2 = parseInt(trim(obj2.value), 10); if (!isValidYear(obj1)) { obj1.focus(); return false; } if (!isValidMonth(obj2)) { obj2.focus(); return false; } return true; } /** * V-24. 객체의 값이 연월에 적합한지 검사한다. * * @param obj 객체 ID * @param sep 구분 문자 * @return */ function isValidYearMonth2(obj, sep) { if (isNull(obj.value)) { obj.focus(); return false; } var str = trim(obj.value); var arr = new Array(); if (sep.length == 0) { arr[0] = str.substring(0, 4); arr[1] = str.substring(4, 6); } else { arr = str.split(sep); if (arr.length != 2) { obj.focus(); return false; } } if (!ValidYear(arr[0]) || !ValidMonth(arr[1])) { obj.focus(); return false; } if (arr[1].length == 1) { arr[1] = "0" + arr[1]; } return true; } function insertSeperatorByWon(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); var signFlag = false; if (str.indexOf("-") != -1) { str = removeString(str, "-"); signFlag = true; } var size = 3; var strMain = ""; var strTail = ""; var strTemp = ""; if (str.indexOf(".") != -1) { strMain = str.substring(0, str.indexOf(".")); strTail = str.substring(str.indexOf(".")); } else { strMain = str; } var strMainLength; var divLength; var remLength; if (str.indexOf(".") == -1) { // 소수점이 없을경우 -> ,(Comma)로 분할한다 strMainLength = strMain.length; if (strMainLength > size) { divLength = parseInt((strMainLength) / size); remLength = parseInt((strMainLength) % size); if (remLength > 0) { strTemp = strMain.substring(0, remLength) + sep; } for (i = 0; i < divLength; i++) { if (i == 0) { strTemp = strTemp + strMain.substring(remLength, remLength + size); } else { strTemp = strTemp + sep + strMain.substring(remLength + (size * i), remLength + (size * i) + size); } } } else { strTemp = strMain; } obj.value = (signFlag ? "-" : "") + strTemp + strTail; } else // 소수점이 있을 경우 { strMainLength = strMain.length; if (strMainLength <= size) { // 소수점이 있고 소수점이상이 3자리를 초과하지 않을경우 -> 소수점이상 그대로 복사 strTemp = strMain; } else { // 소수점이 있고 소수점이상이 3자리를 초과할 경우 -> 소수점이상 ,(Comma)로 분할한다. divLength = parseInt((strMainLength) / size); remLength = parseInt((strMainLength) % size); if (remLength > 0) { strTemp = strMain.substring(0, remLength) + sep; } for (i = 0; i < divLength; i++) { if (i == 0) { strTemp = strTemp + strMain.substring(remLength, remLength + size); } else { strTemp = strTemp + sep + strMain.substring(remLength + (size * i), remLength + (size * i) + size); } } } obj.value = (signFlag ? "-" : "") + strTemp + strTail; } return true; } function insertSeperatorByYearMonth(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 4) { obj.value = str.substring(0, 4); } else if (str.length > 4) { obj.value = str.substring(0, 4) + sep + str.substring(4, (str.length > 6) ? 6 : str.length); } return true; } function insertSeperatorBySsn(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 6) { obj.value = str.substring(0, 6); } else if (str.length > 6) { obj.value = str.substring(0, 6) + sep + str.substring(6, (str.length > 13) ? 13 : str.length); } return true; } function insertSeperatorByDate(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 4) { obj.value = str.substring(0, 4); } else if (str.length > 4 && str.length < 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, (str.length > 6) ? 6 : str.length); } else if (str.length == 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, 6); } else if (str.length > 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, 6) + sep + str.substring(6, (str.length > 8) ? 8 : str.length); } return true; } function insertSeperatorByTimeHms(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 2) { obj.value = str.substring(0, 2); } else if (str.length > 2 && str.length < 4) { obj.value = str.substring(0, 2) + sep + str.substring(2, (str.length > 4) ? 4 : str.length); } else if (str.length == 4) { obj.value = str.substring(0, 2) + sep + str.substring(2, 4); } else if (str.length > 4) { obj.value = str.substring(0, 2) + sep + str.substring(2, 4) + sep + str.substring(4, (str.length > 6) ? 6 : str.length); } return true; } function insertSeperatorByTime(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 2) { obj.value = str.substring(0, 2); } else if (str.length > 2) { obj.value = str.substring(0, 2) + sep + str.substring(2, (str.length > 4) ? 4 : str.length); } return true; } function insertSeperatorByDay(obj, sep) { return insertSeperatorByDate(obj, sep); } function insertSeperatorByResno(obj, sep) { return insertSeperatorBySsn(obj, sep); } function insertSeperatorByZipcode(obj, sep) { if (!isObject(obj)) return false; var str = trim(obj.value); str = removeString(str, sep); if (str.length == 3) { obj.value = str.substring(0, 3); } else if (str.length > 3) { obj.value = str.substring(0, 3) + sep + str.substring(3, (str.length > 6) ? 6 : str.length); } return true; }