<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<!----------------------------------------------------------
이 프로그램의 저작권은 모두 저에게 있습니다.
이 프로그램을 다른 인터넷이나 통신망에 올리시려면 먼저
메일로 저에게 알려 주셔야 하며 소스를 수정하지 않으
셔야합니다.
milklove@yahoo.com
----------------------------------------------------------->
<SCRIPT>
////////////////////////////////////////////////////////////
//
// 함수 jm_gen()
//
//생년월일 입력란과 갯수란을 체크하여 오류가 있으면 알려주고
//오류가 없을 경우 년,월,일, 갯수 정보를 가지고 jm_core()함수
//를 불러 만들어진 주민등록번호를 TEXTAREA에 출력한다.
///////////////////////////////////////////////////////////
function jm_gen()
{
var jm_times=parseInt(howmany.value);//몇개를 만들것인가.
var jm1,jm2,jm3,jm4,jm5,jm6,jm7; //각 자리 숫자
var year1israndom,year2israndom,monthisrandom, dayisrandom,sexisrandom;
year1israndom=false;//년도 십년 자리가 랜덤이 아니다.
year2israndom=false;//년도 일년 자리가 랜덤이 아니다.
monthisrandom=false;//달이 ..
dayisrandom=false;//날짜가..
sexisrandom=false;//성별이..
//------------------------ 갯수 입력 오류 검출
if (howmany.value=="")
{
alert("몇 개를 만들지 결정하십시오.");
howmany.focus();
return 0;
}
if (parseInt(howmany.value)<1)
{
alert("최소한 1개 이상 입력하십시오.");
howmany.focus();
return 0;
}
//---------------------------년도 만들기
if (inputyear1.selectedIndex!=0)
jm1=inputyear1.selectedIndex-1;
else year1israndom=true;
if (inputyear2.selectedIndex!=0)
jm2=inputyear2.selectedIndex-1;
else year2israndom=true;
//------------------------ 생일 입력 오류 검출
var tempyear;
tempyear=1900+jm1*10+jm2;
if (year1israndom==false && year2israndom==false) //년도를 지정했을 때
{
if ( (inputday.selectedIndex) > hasdays(inputmonth.selectedIndex,tempyear) )
{
alert(tempyear+"년 "+inputmonth.selectedIndex+"월에는 1일에서 "+
hasdays(inputmonth.selectedIndex,tempyear)+"일까지밖에 없습니다.");
inputday.focus();
return 0;
}
}
else //년도 두자리중 하나 이상 랜덤으로 되어있을 때.
{
if (year2israndom==false)
{
if( jm2%2==1 && inputmonth.selectedIndex==2 && inputday.selectedIndex>28 )
{
alert("일반적으로 홀수 년도에는 윤년이 없습니다.");
inputday.focus();
return 0;
}
}
if ( (inputday.selectedIndex) > hasdays(inputmonth.selectedIndex,0) )
{
alert("일반적으로 "+inputmonth.selectedIndex+"월에는 1일에서 "+
hasdays(inputmonth.selectedIndex,0)+
"일까지밖에 없습니다. (년도가 없으므로 2월은 29일로 가정합니다.)");
inputday.focus();
return 0;
}
}
//----------------------------월 만들기
switch( inputmonth.selectedIndex )
{
case 0:
monthisrandom=true;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
eval("jm3=0;" + "jm4=inputmonth.selectedIndex;");
break;
case 10:
case 11:
case 12:
eval("jm3=1;" + "jm4=inputmonth.selectedIndex-10;");
break;
}
//-----------------------------일 만들기
switch( inputday.selectedIndex )
{
case 0:
dayisrandom=true;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
jm5=0;
jm6=inputday.selectedIndex;
break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
jm5=1;
jm6=inputday.selectedIndex-10;
break;
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
jm5=2;
jm6=inputday.selectedIndex-20;
break;
case 30:
case 31:
jm5=3;
jm6=inputday.selectedIndex-30;
break;
}
//-----------------------------성별 만들기
switch(inputsex.selectedIndex)
{
case 0:
sexisrandom=true;
break;
case 1:
jm7=1;
break;
case 2:
jm7=2;
}
//------------------------만든 정보로 주민등록 번호 제작
if (year1israndom==false && year2israndom==false && monthisrandom==false && dayisrandom==false && sexisrandom==false)
{//모든 요소가 랜덤이 아닐 경우.
output.innerText="";
for (i=0 ; i<jm_times ; i++)
{
if (jm1==0) output.innerText+="0";
if (jm1==0&&jm2==0) output.innerText+="0";
if (jm1==0&&jm2==0&&jm3==0) output.innerText+="0";
output.innerText+=jm_core(jm1,jm2,jm3,jm4,jm5,jm6,jm7)+" ";
}
}
else //한 가지 요소라도 랜덤일 경우.
{
output.innerText="";
for (i=0 ; i<jm_times ; i++)
{
if (year1israndom)
jm1=random0to9();
if (year2israndom)
jm2=random0to9();
if (monthisrandom)
{
temp=parseInt( (Math.random()*1000)%12+1 );
if(temp<10)
{
jm3=0;
jm4=temp;
}
else
{
tempchar=temp+"?"//문자열로 전환;
jm3=parseInt(tempchar.charAt(0));
jm4=parseInt(tempchar.charAt(1));
}
}
if (dayisrandom)
{
temp=parseInt( (Math.random()*1000)%28+1 ); //월별로 다른 일수를 피하기 위해...
if(temp<10)
{
jm5=0;
jm6=temp;
}
else
{
tempchar=temp+"?"//문자열로 전환;
jm5=parseInt(tempchar.charAt(0));
jm6=parseInt(tempchar.charAt(1));
}
}
if (sexisrandom)
{
temp=Math.random();
if(temp>0.5) jm7=1;
else jm7=2;
}
if ( jm5*10+jm6 >hasdays(jm3*10+jm4,1900+jm1*10+jm2) )
{
i--;
continue; //랜덤으로 만든 달이 사용자가 입력한 일수보다
//적은 일수를 가지고 있을 때 다시 뽑는다.;
}
if (jm1==0) output.innerText+="0";
if (jm1==0&&jm2==0) output.innerText+="0";
if (jm1==0&&jm2==0&&jm3==0) output.innerText+="0";
output.innerText+=jm_core(jm1,jm2,jm3,jm4,jm5,jm6,jm7)+" ";
}
}
}
////////////////////////////////////////////////////////////
//
// 함수 random0to9()
//
//0에서 9까지의 수를 무작위로 만들어 낸다.
///////////////////////////////////////////////////////////
function random0to9()
{
return parseInt(Math.random()*10);
}
////////////////////////////////////////////////////////////
//
// 함수 hasdays(정수)
//
//인자로 받은 달의 일수를 되돌려준다.
///////////////////////////////////////////////////////////
function hasdays(monthtoknow,yeartoknow)
{
switch(monthtoknow)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
case 4:
case 6:
case 9:
case 11:
return 30;
break;
case 2:
//4로 나누어 떨어지지 않는 해는 윤년이 아니다.
//100으로 나누어 떨어지고 400으로 나누어 떨어지지
// 않는 해는 윤년이 아니다. 이거 맞겠지...
if (yeartoknow==0)
return 29;
if ((yeartoknow%4!=0) || ((yeartoknow%100==0)&&(yeartoknow%400!=0)) )
return 28;
else return 29;
}
}
////////////////////////////////////////////////////////////
//
// 함수 jm_verify()
//
//각 입력란의 공백여부를 체크하고, 주민등록번호 알고리듬에
//따라 맞는 주민등록번호인지를 체크하고 알려준다.
///////////////////////////////////////////////////////////
function jm_verify()
{
//----------------------------입력 오류 체크
if (firstnum.value=="")
{
alert("앞부분을 채워 주십시오.");
firstnum.focus();
return 0;
}
if (secondnum.value=="")
{
alert("뒷부분을 채워 주십시오.");
secondnum.focus();
return 0;
}
if (firstnum.value.length!=6)
{
alert("앞부분은 6자리여야 합니다.");
firstnum.focus();
return 0;
}
if (secondnum.value.length!=7)
{
alert("뒷부분은 7자리여야 합니다.");
secondnum.focus();
return 0;
}
//----------------------------입력 오류 체크 끝
/*--필드 값을 숫자형으로 바꾸는 부분--*/
var jm1=parseInt(firstnum.value.charAt(0));
var jm2=parseInt(firstnum.value.charAt(1));
var jm3=parseInt(firstnum.value.charAt(2));
var jm4=parseInt(firstnum.value.charAt(3));
var jm5=parseInt(firstnum.value.charAt(4));
var jm6=parseInt(firstnum.value.charAt(5));
var jm7=parseInt(secondnum.value.charAt(0));
var jm8=parseInt(secondnum.value.charAt(1));
var jm9=parseInt(secondnum.value.charAt(2));
var jm10=parseInt(secondnum.value.charAt(3));
var jm11=parseInt(secondnum.value.charAt(4));
var jm12=parseInt(secondnum.value.charAt(5));
var jm13=parseInt(secondnum.value.charAt(6));
var jmwhole=firstnum.value+"-"+secondnum.value;
if (isNaN(jm1)||isNaN(jm2)||isNaN(jm3)||isNaN(jm4)||isNaN(jm5)||isNaN(jm6))
{
alert("앞부분에 숫자가 아닌 문자가 있습니다.");
firstnum.focus();
return 0;
}
if (isNaN(jm7)||isNaN(jm8)||isNaN(jm9)||isNaN(jm10)||isNaN(jm11)||isNaN(jm12)||isNaN(jm13))
{
alert("뒷부분에 숫자가 아닌 문자가 있습니다.");
secondnum.focus();
return 0;
}
/*----연산------*/
var lastnum=11-((jm1*2+jm2*3+jm3*4+jm4*5+jm5*6+jm6*7+jm7*8+jm8*9+jm9*2+jm10*3+jm11*4+jm12*5)%11);
if (lastnum>9) lastnum=lastnum % 10;
/*----결과 창 보이기----*/
if ( (jm3*10+jm4)<1 || (jm3*10+jm4)>12)
{
alert("1년에는 12달밖에 없습니다.\n셋째자리와 넷째자리는 월을 나타냅니다.");
firstnum.focus();
return 0;
}
if ((jm5*10+jm6)<1)
{
alert("날짜는 최소한 1일입니다.");
firstnum.focus();
return 0;
}
var tempyear;
tempyear=1900+jm1*10+jm2;
if ( (jm5*10+jm6)>hasdays(jm3*10+jm4,tempyear) )
{
alert(tempyear+"년 "+jm3*10+jm4+"월에는 "+hasdays(jm3*10+jm4,tempyear)+"일까지밖에 없습니다.\n"+
"다섯째자리와 여섯째자리는 일을 나타냅니다.");
firstnum.focus();
return 0;
}
if ( jm7!=1 && jm7!=2 )
{
alert("\"-\"다음 칸의 숫자는 성별로 남자는 1, 여자는 2여야 합니다.");
secondnum.focus();
return 0;
}
if (lastnum==jm13)
alert(jmwhole+"는 유효한 주민등록번호입니다.");
if (lastnum!=jm13)
{
alert(jmwhole+"는 유효하지 않은 번호입니다.\n끝자리가 "+lastnum+"이 아닙니다.");
secondnum.focus();
}
}
////////////////////////////////////////////////////////////
//
// 함수 jm_core(정수,정수,정수,정수,정수,정수,정수)
//
//앞자리의 7개 숫자 즉, 주민등록번호의 XXXXXX-X까지의 정보를
//받아 나머지 부분은 랜덤으로 처리하여 완전한 주민등록번호를
//되돌린다. 단 00년일 경우는 앞자리가 0이 아닌 '없음'이 되므
//로 미리 처리해 둔다.
///////////////////////////////////////////////////////////
function jm_core(jm1,jm2,jm3,jm4,jm5,jm6,jm7)
{
var jm8=random0to9();
var jm9=random0to9();
var jm10=random0to9();
var jm11=random0to9();
var jm12=random0to9();
var lastnum=11-((jm1*2+jm2*3+jm3*4+jm4*5+jm5*6+jm6*7+jm7*8+jm8*9+jm9*2+jm10*3+jm11*4+jm12*5)%11);
if (lastnum>9) lastnum=lastnum % 10;
var firstpart;
var secondpart;
firstpart=jm1*100000+jm2*10000+jm3*1000+jm4*100+jm5*10+jm6;
secondpart=jm7*1000000+jm8*100000+jm9*10000+jm10*1000+jm11*100+jm12*10+lastnum;
return firstpart+"-"+secondpart;
}
////////////////////////////////////////////////////////////
//
// 함수 chartest()
//
// 만약 눌려진 키가 문자이면 인자로 받은 HTML 요소의 내용을
//없앤다. 엔터를 치면 다음 입력란으로 포커스를 준다.
////////////////////////////////////////////////////////////
function chartest()
{
if (event.keyCode!=229 && event.keyCode>185)
{
alert("숫자만 입력하십시오.");
howmany.value="";
howmany.focus();
return false;
}
if ( (event.keyCode>=65 && event.keyCode<=90 )|| event.keyCode==0x20)
{
alert("숫자만 입력하십시오.");
howmany.value="";
howmany.focus();
return false;
}
if (event.shiftKey==true && event.keyCode!=0x9)
{
alert("숫자만 입력하십시오.");
howmany.value="";
howmany.focus();
return false;
}
if (event.keyCode==0xD)//개수에서 엔터를 치면 기능 실행
jm_gen();
}
function notmsie()
{
alert(" Trouble Shooting\n\n"+
"이 창이 보인다면 일단 사용자의 브라우저가 자바스크립트를\n"+
"지원하는 것입니다. 이 프로그램은 자바스크립트로 만들어\n"+
"졌으므로 대부분의 브라우저에서 작동될 것이지만, 만일 각\n"+
"기능이 제대로 작동하지 않는다면 MS 인터넷 익스플로러 4\n"+
"이상의 버전을 사용하십시오.\n"+
"특히 도움말 부분은 비주얼 베이직 스크립트라서 MS 인터넷\n"+
"익스플로러에서만 실행될 것입니다.");
}
function move2second()
{
if (event.keyCode==0xD)//앞부분 입력란에서 엔터를 치면 뒷부분으로
secondnum.focus();
}
function exe_verify()
{
if (event.keyCode==0xD)//뒷부분 입력란에서 엔터를 치면 유효 검사 실행
jm_verify();
}
function increase_one()
{
if (howmany.value=="")
howmany.value=1;
else
howmany.value=parseInt(howmany.value)+1;
}
function decrease_one()
{
if (howmany.value=="")
howmany.value=1;
else if ( parseInt(howmany.value)==1 )
alert("최소한 1보다 커야 합니다!");
else
howmany.value=parseInt(howmany.value)-1;
}
</SCRIPT>
<SCRIPT language=VBScript>
sub help1_onClick
dummy=msgbox("만들기를 원하는 년도, 월, 일을 입력합니다."+vbcr+_
"프로그램에서 오류를 체크해 주지만 오류창을"+vbcr+_
"보시고 싶지 않으시다면 정확히 입력하십시오."+vbcr+vbcr+_
"오류 예) 2월 30일을 선택하는 등의 행위",64,"주민등록번호의 모든 것 버전 1.3 도움말")
end sub
sub help2_onClick
dummy=msgbox("어떤 주민등록번호가 올바른 것인지 검사합니다."+vbcr+_
"주민등록번호의 알고리듬은 맨끝자리를 제외한"+vbcr+_
"자리의 숫자를 더하고 곱해서 끝자리가 나오도록"+vbcr+_
"되어있습니다. 따라서 아무렇게나 입력했을 때"+vbcr+_
"맞을 확률은 1/10이 되겠지요."+vbcr+_
"틀린 번호라고 나올 때는 끝자리만 바꾸면 됩니다.",64,"주민등록번호의 모든 것 버전 1.3 도움말")
end sub
sub about_onClick
agree=7
while agree=7
agree=msgbox(" *** 주민등록번호의 모든 것 버전 1.3 ***"+vbcr+vbcr+_
" 이 프로그램은 홈페이지 제작시 주민등록번호를"+vbcr+_
"체크할 때 참고하시라고 만든 것입니다."+vbcr+vbcr+_
"업데이트 : 2000년 11월 16일"+vbcr+vbcr+_
vbtab+"사용자 동의 사항"+vbcr+vbcr+_
"1> 이 프로그램을 악용하지 않겠습니다."+vbcr+_
"2> 다른 곳에 올릴 때 프로그램을 제작자 허락없이"+vbcr+_
" 수정하지 않겠습니다."+vbcr+vbcr+_
vbtab+"위의 내용에 동의하십니까?",292,"주민등록번호의 모든 것 1.3에 관해서...")
if (agree=7) then
dummy=msgbox("동의하십시오!",16,"경고")
end if
wend
end sub
</SCRIPT>
<STYLE>A:link {
COLOR: #aaaaff
}
A:visited {
BACKGROUND-COLOR: #d1ffe7; COLOR: #0ac6c4
}
A:active {
BACKGROUND-COLOR: #fce2ff; COLOR: #ff0000; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
A:hover {
BACKGROUND-COLOR: #fce2ff; COLOR: #acc0ff; TEXT-DECORATION: none
}
</STYLE>
</HEAD>
<BODY oncontextmenu="return false"
ondragstart="return false" onkeydown="return false"
onselectstart="return false">
<H2 align=center>주민등록번호의 모든 것 버전 1.3</H2>
<FIELDSET>
<LEGEND>주민등록번호 만들기</LEGEND>생일 : 19 <SELECT name=inputyear1> <OPTION
selected>랜덤</OPTION><OPTION>0</OPTION>
<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>4</OPTION>
<OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>8</OPTION>
<OPTION>9</OPTION></SELECT> <SELECT name=inputyear2> <OPTION
selected>랜덤</OPTION><OPTION>0</OPTION>
<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>4</OPTION>
<OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>8</OPTION>
<OPTION>9</OPTION></SELECT>년 <SELECT name=inputmonth> <OPTION
selected>랜덤</OPTION>
<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>4</OPTION>
<OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>8</OPTION>
<OPTION>9</OPTION><OPTION>10</OPTION><OPTION>11</OPTION><OPTION>12</OPTION></SELECT>월
<SELECT name=inputday> <OPTION selected>랜덤</OPTION>
<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>4</OPTION>
<OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>8</OPTION>
<OPTION>9</OPTION><OPTION>10</OPTION><OPTION>11</OPTION><OPTION>12</OPTION>
<OPTION>13</OPTION><OPTION>14</OPTION><OPTION>15</OPTION><OPTION>16</OPTION>
<OPTION>17</OPTION><OPTION>18</OPTION><OPTION>19</OPTION><OPTION>20</OPTION>
<OPTION>21</OPTION><OPTION>22</OPTION><OPTION>23</OPTION><OPTION>24</OPTION>
<OPTION>25</OPTION><OPTION>26</OPTION><OPTION>27</OPTION><OPTION>28</OPTION>
<OPTION>29</OPTION><OPTION>30</OPTION><OPTION>31</OPTION></SELECT>일<BR>성별 :
<SELECT name=inputsex onkeyup="if(event.keyCode==0xD) gen.focus();"> <OPTION
selected>랜덤</OPTION> <OPTION>남자</OPTION> <OPTION>여자</OPTION></SELECT><BR>개수 :
<INPUT maxLength=3 name=howmany onkeyup=chartest(); size=3
title="1에서 999까지의 숫자를 입력합니다. 엔터를 누르면 실행합니다." value=10> <INPUT onclick=increase_one(); onmouseover="this.style.cursor='hand';" style="COLOR: blue; FONT-WEIGHT: bold" title="개수를 1증가시킵니다." type=button value=++>
<INPUT onclick=decrease_one(); onmouseover="this.style.cursor='hand';" style="COLOR: red; FONT-WEIGHT: bold" title="개수를 1감소시킵니다." type=button value=-->
<INPUT accessKey=m onclick=jm_gen() onmouseover="this.style.cursor='hand';" type=button value="주민등록번호 만들기(M)">
<INPUT name=help1 onmouseover="this.style.cursor='help'" type=button value=도움말><BR><TEXTAREA cols=30 name=output rows=5 wrap=physical></TEXTAREA>
</FIELDSET>
<FIELDSET>
<LEGEND>주민등록번호 유효 검사</LEGEND>주민등록번호 : <INPUT maxLength=6 name=firstnum
onkeypress=move2second(); size=6 title="엔터를 누르시면 뒷자리 입력란으로 넘어갑니다."> - <INPUT
maxLength=7 name=secondnum onkeypress=exe_verify(); size=7
title="다 입력하셨으면 엔터를 누르십시오."> <INPUT accessKey=v onclick=jm_verify() onmouseover="this.style.cursor='hand';" title="입력한 번호가 바른 주민등록번호인지 검사합니다." type=button value="유효 검사(V)">
<INPUT accessKey=n onclick="firstnum.value='';secondnum.value='';firstnum.focus();" onmouseover="this.style.cursor='hand';" title="입력칸을 비우고 앞자리 입력란으로 캐럿을 이동합니다.(RESET)" type=button value="새로 입력(N) ">
<INPUT name=help2 onmouseover="this.style.cursor='help'" type=button value=도움말>
</FIELDSET> <BR>
<CENTER><INPUT accessKey=t onclick=notmsie(); onmouseover="this.style.cursor='help';" title="익스플로러가 아닌 경우에 대한 설명입니다. 이 글이 보인다면 익스플로러이므로 걱정이 없습니다." type=button value="문제 해결(T)">
<INPUT accessKey=a name=about onmouseover="this.style.cursor='help';" title="이 프로그램에 대한 정보를 표시합니다. (ABOUT)" type=button value=정보(A)>
<INPUT accessKey=x onclick=window.close(); onmouseover="this.style.cursor='hand';" title="이 창을 닫습니다." type=button value="프로그램 종료(X)">
</CENTER></BODY>
</HTML> | |hit:3950|2003/06/23
|