만일 당신의 고객이 사용한 신용카드 번호가 유효한지 확인할 필요가 있다면 다음의 몇가지 사항에 대하여 반드시 확인해야 한다. 즉, 고객의 카드 번호가 카드 발급인의 카드 번호 스킴형태와 일치하는지를 체크하는 등 이와 관련하여 몇 개의 간단한 자바스크립트 함수에 대하여 논하고자 한다. 당신의 ASP 응용프로그램이 사용자로 하여금 카드 정보를 제출하도록 요할 수 있다면 당신은 이 함수를 사용할 수 있다.



클라이언트측 코드 작성

이용자의 프라이버시를 보호함에 있어서 서버측에서 유효성을 검사하는 것보다 클라이언트측에서 검사하는 것이 더 효과적이라는 것은 누구나 알고 있다. 단지 우리의 웹 응용프로그램들은 한 작업을 수행하기 위해 클라이언트와 서버 기술을 결합해야만 진실로 분산되었다고 정의할 수 있을 뿐이다. 더욱이, 세련된 응용프로그램이 더 많이 지원되는 브라우저일수록 (단지 개인의 홈페이지가 아닌) 외부로 부터의 보호를 브라우저에 의존하는게 보편적인 경우다.



카드의 유효성 검사

신용카드 번호의 유효성을 검사하기 위해 카드 타입과 실제 카드 번호 두가지에 대한 데이타가 필요하다. 필자가 만든 함수들은 비자, 마스터 카드, 디스커버, 그리고 아메리칸 익스프레스 카드 번호를 지원하는데 그러한 것들을 선택한 이유는 그러한 것들이 주된 카드 회사라고 생각되었기 때문이다. 유효성 검사에 필요한 세가지 작업들(자바 스크립트 함수)에 대해 살펴보기로 하자.

먼저 선택한 카드 타입에 대한 것을 수치로 정의해보자.

var ectVisa = 0; var ectMasterCard = 1; var ectDiscover = 2; var ectAmex = 3;

이러한 값들은 임의로 정해진 것들이다. 당신이 올바른 카드 타입을 숫자(0,1,2,3)에 대응할 수 있다면 그 값들을 임의로 정할 수 있다.


<select name="mycardTypes" size="1"> <option value="0">Visa</option>
<option value="1">Mastercard</option> <option value="2">Discover</option>
<option value="3">American Express</option></select>


이제, 함수들을 살펴보자. 첫번째 자바 스크립트 함수, stripNonNumbers() 는 텍스트 필드 또는 숫자열들로부터 숫자를 제외한 모든 찌꺼기들을 제거한다. 여기 그 코드가 있다.


function stripNonNumbers(inNumStr) {
var outNumStr = "";
var i;

for (i=0; i<inNumStr.length; i++)
if (isDigit(inNumStr.charAt(i)))
outNumStr = outNumStr + inNumStr.charAt(i);
return outNumStr;
}


두번째, 루틴 isDigit()은 위 루틴에서도 볼 수 있듯이 매우 간단하다. 너무 단순해서 당신은 이것을 일분안에 코딩할 수 있으리라 확신한다.


function isDigit(ch) {
return ((ch >= "0") && (ch <= "9"));
}


마지막으로, 메인 함수 먼저 stripNonNumbers()을 호출하고, 네가지 조건문 중 하나로 분기하던가 그 어떤 경우도 아니면 false를 리턴한다. isValidCCNumber()을 보라.


function isValidCCNumber(inCCNum,inCCType) {
var tmpCCNum = stripNonNumbers(inCCNum);

if (inCCType == ectVisa) {
  if ((tmpCCNum.length != 16) && (tmpCCNum.length !=13)) return false;
  if (tmpCCNum.substring(0,1) != "4") return false; else return true; }

else if (inCCType == ectMasterCard) {
  if (tmpCCNum.length != 16) return false;
  if ((tmpCCNum.charAt(0) == "5") && (tmpCCNum.charAt(1) >= "1") && (tmpCCNum.charAt(1) <= "5" )) return true; else return false; }

else if (inCCType == ectDiscover) {
  if (tmpCCNum.length != 16) return false;
  if (tmpCCNum.substring(0,4) != "6011") return false; else return true; }

else if (inCCType == ectAmex) {
  if (tmpCCNum.length != 15) return false;
  if ((tmpCCNum.substring(0,2) != "34") && (tmpCCNum.substring (0, 2) != "37")) return false; else return true; }

return false;
}



이제 카드 번호의 유효성 검사에 대한 기본지식을 배운 셈이다. 당신은 또한 훨씬 더 복잡한 유효성 검사기, 이를테면 카드의 유효 기간을 검사하는 것과 연결해서도 사용할 수 있을 것이다. 마지막으로 다시한번 강조하자면, 이 유효성 검사기는 클라이언트와 서버의 작업량 균형에 그 주안점을 두고 있기 때문에 여기서 제시된 방법이 적절하다고 판단되면 서버측 코드를 클라이언트측으로 포팅하라고 권하고 싶다.


[출처 :
http://korea.internet.com]

+ Recent posts