Flash CS4+ActionScript 3.0으로 주민등록번호 유효성 테스트를 만들어 봤다.
근래에 들어 이런 주민등록번호 유효성 테스트는 거의 쓸모가 없어졌지만(웹 사이트 등에서의 주민등록번호 수집이 금지됐다) 주민등록번호가 아니라도 입력받은 문자열을 이용해 유효성을 테스트하거나 계산을 하거나 하는 경우는 종종 있어서 나중에 참고용으로 만들어 본 것.
계산 부분에서 비교의 대상인 마지막 숫자를 총합에 더하는 실수를 해서 좀 헤멨었다.

주민등록번호 체크 로직
1. 주민등록번호의 앞 6자리의 수에 처음부터 차례대로 2,3,4,5,6,7 을 곱한다.
뒤 7자리의 수에 마지막 자리만 제외하고 차례대로 8,9,2,3,4,5 를 곱한다.
2. 이렇게 곱한 각 자리의 수들을 모두 더한다.
3. 모두 더한 수를 11로 나눈 나머지를 구한다.
4. 이 나머지를 11에서 뺀다.
5. 이렇게 뺀 수가 두 자릿수이면, 즉 10보다 크면 다시 10으로 나누어 나머지 값을 구한다.
6. 이렇게 해서 나온 최종 값을 주민등록번호의 마지막 자리 수와 비교해서 같으면 유효한 번호이고 다르면 잘못된 값이다.

actionScript 3.0 팁들:
.charAt()을 이용해 문자열의 각 자리 수를 따로 지정하거나 뽑아낼 수 있다.
.focus를 이용해 커서 위치를 지정해 주거나 옮길 수 있다.
Number()를 이용해 문자열을 숫자로 변경할 수 있다.

15/3/22 일

* 위키백과 주민등록번호 항목
* 엔하위키 주민등록번호 항목

미리 'input01', 'input02' 입력 텍스트 박스와 'outputText' 다이나믹 텍스트 박스를 만들어 뒀다.
var in1:Object=new Object();
var in2:Object=new Object();
var inputArr:Array=new Array(); //입력된 번호 담을 배열
var gopArr:Array=[8,9,2,3,4,5]; //뒷자리 곱셈용 배열
var sum:Number=0; //총합용 변수
var firsts:Boolean = true; //처음인지 여부 확인용 변수

function init(){
     stage.focus=input01;
     addEventListener(KeyboardEvent.KEY_UP, keyUps);
}
function keyUps(e:KeyboardEvent){ //키보드 입력 처리
     in1.all = input01.text;
     in2.all = input02.text;
     //처음 한번만 앞 입력창 글자가 6이상일 경우 
     //다음 입력창으로 커서 옮기기
     if(firsts && in1.all.length > 5){
          firsts=false;
          stage.focus=input02;
     }
     if(e.keyCode == 13){ //엔터 키 클릭시
          in1.year = Number(in1.all.charAt(0))*10+Number(in1.all.charAt(1));
          in1.mon = Number(in1.all.charAt(2))*10+Number(in1.all.charAt(3));
          in1.day = Number(in1.all.charAt(4))*10+Number(in1.all.charAt(5));
          checkNum(); //번호 유효성 체크 함수 호출
     }
}
function checkNum(){ //번호 유효성 여부 체크 함수
     if(in1.all.length != 6){
          outputText.text="앞자리는 6자리 숫자이어야 합니다.";
          return false;
     }
     if(in2.all.length != 7){
          outputText.text="뒷자리는 7자리 숫자이어야 합니다.";
          return false;
     }
     if(in1.mon < 1 || in1.mon > 12){
          outputText.text="태어난 달이 잘못되었습니다.";
          return false;
     }
     if(in1.day < 1 || in1.day > 31){
          outputText.text="태어난 날이 잘못되었습니다.";
          return false;
     }
     inputArr = []; //배열 비워 초기화
     for(var i=0; i<6; i++){
          inputArr.push(in1.all.charAt(i)*(2+i));
     }
     for(var j=0; j<6; j++){
          inputArr.push(in2.all.charAt(j)*gopArr[j]);
     }
     inputArr.push(Number(in2.all.charAt(6)));
     sum = 0; //총합 초기화
     for(var k=0; k<12; k++){ //마지막 자리를 제외하고 모두 더하기
          sum += inputArr[k];
     }
     sum = (11-(sum % 11)) % 10; //11에서 총합을 11로 나눈 나머지를 빼고 10으로 나눈 나머지
     if(sum == inputArr[12]){
          outputText.text=sum+", "+inputArr[12]+"\n유효한 주민등록번호입니다";
          return true;
     }else{
          outputText.text=sum+", "+inputArr[12]+"\n유효하지 않은 주민등록번호입니다";
          return false;
     }
}

init();