자바스크립트에서 날짜 관련 핸들링은 항상 어렵다.

 

월단위로 데이터를 검색하는 경우 검색 조건 통제를 위한 자바스크립트로 월단위를 더하는 방식을 알아본다.

 

// 한자리면 0붙이기

function pad(n) {

    return n < 10 ? '0'+n : ''+n

}

// 월 더하기
function addMonth(d, n) {
    d.setMonth(d.getMonth() + n);
    return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(d.getDate());    
}

// 실행

console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'

console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'

console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/03/03' ??????????????

 

이는 자바스크립트에서 setMonth 함수로 월을 셋팅하면 일은 그대로고 월만 변경 되기 때문에

2022/02/31 이 된다. 2월은 28일 까지 있으므로 자바스크립트 자체에서 2월28일에서 3일을 더해 3월3일이 되는 것이다.

이에 대한 예외 처리를 해줘야 한다.

// 1자리면 0 붙이기

function pad(n) {
    return n < 10 ? '0'+n : ''+n
}

// 윤년인지여부
function isLeapYear(year) {
    return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); 
}

// 해당년월의 말일 구하기
function getLastDate(year, month) {
    return [31, (isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}

// 월 더하기
function addMonth(d, n) {
    var date = d.getDate();
    d.setDate(1); // 1일로 설정
    d.setMonth(d.getMonth() + n); // 개월수 더하기
    //d.setDate(d.getDate() - 1); 
    return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(Math.min(date, getLastDate(d.getYear(), d.getMonth())));    
}
// 실행
console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'
console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'

console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/02/28'

제대로 나오는거 같다.

주민번호 형식 : 123456-1234567

 

1. 정규식으로 숫자6자리, 대쉬, 숫자7자리 체크

2. 주민번호 체크 로직으로 체크

주민번호 첫자리부터 12번째 자리까지 순서대로 

2,3,4,5,6,7,8,9,2,3,4,5 를 한자리씩 곱해서 모두 더한다.

모두 더한값을 11로 나누어 나머지를 구한다.

11에서 나머지를 뺀 값이 주민번호의 마지막 번호와 같으면 유효하다.

ex) sum = 1*2 + 2*3 + 3*4 + 4*5 + 5*6 + 6*7 + 1*8 + 2*9 + 3*2 + 4*3 + 5*4 + 6*5 = 206

나머지 = 206 % 11 = 8

값 = 11 - 8 = 3

주민번호 마지막은 7이므로 유효하지 않음.

 

// 주민번호 체크
function isResidentRegNoValid(residentRegNo) {
	var re = /^[0-9]{6}-[0-9]{7}$/;
	if (!re.test(String(residentRegNo).toLowerCase())) {
		return false;
	}

	var regNos = residentRegNo.replace('-', '').split('');
	var checkNos = [2,3,4,5,6,7,8,9,2,3,4,5];
	var sum = 0;
	for (var i = 0; i < checkNos.length; i++) {
		sum = sum + (checkNos[i] * Number(regNos[i]));
	}
	return ((11 - (sum % 11)) % 10) == Number(regNos[12]);
}

 

 

 

 

 

+ Recent posts