/*
* Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package egovframework.rte.ptl.mvc.validation;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
import org.springframework.validation.Errors;
import org.springmodules.validation.commons.FieldChecks;
/**
* RteFieldChecks.java
* <p/><b>NOTE:</b>
* <pre> 주민등록번호, 한글체크 같은 Jakarta Commons Validator에서 제공되지 않는 validation rule을 추가로 제공한다.
* 실제 validation check는 RteGenericValidator에 위임한다.</pre>
*
* @author 실행환경 개발팀 함철
* @since 2009.06.01
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.05.30 함철 최초 생성
* 2011.09.23 이기하 validateEnglish 메소드 추가
* 2013.03.22 한성곤 패스워드 관련 점검 메소드 추가
*
* </pre>
*/
public class RteFieldChecks extends FieldChecks {
/**
* serialVersion UID
*/
private static final long serialVersionUID = 611324405170619860L;
/**
* 주민등록번호 유효성 체크
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validateIhIdNum(Object bean, ValidatorAction va, Field field, Errors errors) {
String ihidnum = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.isValidIdIhNum(ihidnum)) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
}
/**
* 한글여부 체크
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validateKorean(Object bean, ValidatorAction va, Field field, Errors errors) {
String value = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.isKorean(value)) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
}
/**
* 영어여부 체크
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validateEnglish(Object bean, ValidatorAction va, Field field, Errors errors) {
String value = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.isEnglish(value)) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
}
/**
* HTML tag 포함여부 체크
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validateHtmlTag(Object bean, ValidatorAction va, Field field, Errors errors) {
String value = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.isHtmlTag(value)) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
}
/**
* 패스워드 점검 : 8~20자 이내
*
* <p>Rules' javascript Example:</p>
* <pre>
function validatePassword1(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oPassword = new password1();
for (x in oPassword) {
var field = form[oPassword[x][0]];
if (field.type == 'password') {
if (trim(field.value).length == 0 || !checkPassword1(field)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oPassword[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
function checkPassword1(pwd) {
p_pass = pwd.value;
if (pwd.value.length < 8 || pwd.value.length > 20) {
pwd.value = "";
pwd.focus();
return false;
}
return pwd;
}
* </pre>
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validatePassword1(Object bean, ValidatorAction va, Field field, Errors errors) {
String password = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.checkLength(password)) {
FieldChecks.rejectValue(errors, field, va);
return false;
}
return true;
}
/**
* 패스워드 점검 : 한글,특수문자,띄어쓰기는 안됨
*
* <p>Rules' javascript Example:</p>
* <pre>
function validatePassword2(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oPassword = new password2();
for (x in oPassword) {
var field = form[oPassword[x][0]];
if (field.type == 'password') {
if (trim(field.value).length == 0 || !checkPassword2(field)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oPassword[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
function checkPassword2(pwd) {
var str = pwd.value;
for ( var i = 0; i < str.length; i++) {
ch_char = str.charAt(i);
ch = ch_char.charCodeAt();
if ((ch >= 33 && ch <= 47) || (ch >= 58 && ch <= 64)
|| (ch >= 91 && ch <= 96) || (ch >= 123 && ch <= 126)) {
return false;
}
}
return pwd;
}
* </pre>
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validatePassword2(Object bean, ValidatorAction va, Field field, Errors errors) {
String password = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.checkCharacterType(password)) {
FieldChecks.rejectValue(errors, field, va);
return false;
}
return true;
}
/**
* 패스워드 점검 : 연속된 문자나 순차적인 문자 4개이상 사용금지
*
* <p>Rules' javascript Example:</p>
* <pre>
function validatePassword3(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oPassword = new password3();
for (x in oPassword) {
var field = form[oPassword[x][0]];
if (field.type == 'password') {
if (trim(field.value).length == 0 || !checkPassword3(field)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oPassword[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
function checkPassword3(pwd) {
p_pass = pwd.value;
var cnt1 = 0, cnt2 = 1, cnt3 = 1;
for (var i = 0; i < p_pass.length; i++) {
temp_pass1 = p_pass.charAt(i);
next_pass = (parseInt(temp_pass1.charCodeAt(0))) + 1;
temp_p = p_pass.charAt(i + 1);
temp_pass2 = (parseInt(temp_p.charCodeAt(0)));
if (temp_pass2 == next_pass)
cnt2 = cnt2 + 1;
else
cnt2 = 1;
if (temp_pass1 == temp_p)
cnt3 = cnt3 + 1;
else
cnt3 = 1;
if (cnt2 > 3)
break;
if (cnt3 > 3)
break;
}
if (cnt2 > 3) {
pwd.value = "";
pwd.focus();
return false;
}
return pwd;
}
* </pre>
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validatePassword3(Object bean, ValidatorAction va, Field field, Errors errors) {
String password = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.checkSeries(password)) {
FieldChecks.rejectValue(errors, field, va);
return false;
}
return true;
}
/**
* 패스워드 점검 : 반복문자나 숫자 연속 4개이상 사용금지
*
* <p>Rules' javascript Example:</p>
* <pre>
function validatePassword4(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oPassword = new password4();
for (x in oPassword) {
var field = form[oPassword[x][0]];
if (field.type == 'password') {
if (trim(field.value).length == 0 || !checkPassword4(field)) {
if (i == 0) {
focusField = field;
}
fields[i++] = oPassword[x][1];
bValid = false;
}
}
}
if (fields.length > 0) {
focusField.focus();
alert(fields.join('\n'));
}
return bValid;
}
function checkPassword4(pwd) {
p_pass = pwd.value;
var cnt1 = 0, cnt2 = 1, cnt3 = 1;
for (var i = 0; i < p_pass.length; i++) {
temp_pass1 = p_pass.charAt(i);
next_pass = (parseInt(temp_pass1.charCodeAt(0))) + 1;
temp_p = p_pass.charAt(i + 1);
temp_pass2 = (parseInt(temp_p.charCodeAt(0)));
if (temp_pass2 == next_pass)
cnt2 = cnt2 + 1;
else
cnt2 = 1;
if (temp_pass1 == temp_p)
cnt3 = cnt3 + 1;
else
cnt3 = 1;
if (cnt2 > 3)
break;
if (cnt3 > 3)
break;
}
if (cnt3 > 3) {
pwd.value = "";
pwd.focus();
return false;
}
return pwd;
}
* </pre>
*
* @param bean
* @param va
* @param field
* @param errors
* @return
*/
public static boolean validatePassword4(Object bean, ValidatorAction va, Field field, Errors errors) {
String password = FieldChecks.extractValue(bean, field);
if (!RteGenericValidator.checkSeries(password)) {
FieldChecks.rejectValue(errors, field, va);
return false;
}
return true;
}
}