RSS

Luhn algorithm

08 May

Thuật giải : mã thẻ ATM là 1 con số có chiều dài 16 chữ số , để xác định số này có hợp lệ hay ko, ta làm như sau:

Sắp ngược dãy số lại theo chiều dọc

Các số nằm ở dòng lẻ (theo số thứ tự) thì để bình thường

Các số nằm ở dòng chẵn thì double lên rồi lấy chữ số 1 + chữ số 2

tổng cộng kết quả lại đc 1 con số chia hết cho 10 thì dãy số hợp lệ

Dưới đây là minh họa cho dãy số 446667651:

Còn dưới đây là đoạn code xử lý :

void ValidateCCNumber(object s, ServerValidateEventArgs e)

{

bool blnIsEven = false;

string strCCNumber = e.Value;

string strDigits = String.Empty;

int intCheckSum = 0;

if(strCCNumber==String.Empty)

e.IsValid = false;

else

{

for(int i = strCCNumber.Length – 1; i >= 0; i–)

{

if(blnIsEven)

strDigits += Int32.Parse(strCCNumber.Substring(i, 1)) * 2;

else

strDigits += Int32.Parse(strCCNumber.Substring(i, 1));

blnIsEven = !blnIsEven;

}

//calculate CheckSum

foreach(Char letter in strDigits)

intCheckSum += Int32.Parse(letter.ToString());

//assigns result

e.IsValid = ((intCheckSum % 10)==0);

}

}

đoạn code trên đc lấy từ slide của GV : Đặng Trần Thọ – FPT – Aptech – TPHCM

 
 

One response to “Luhn algorithm

  1. Dương Thiên Tứ

    02/08/2010 at 16:42

    Code trên quá dài, code bằng Java:

    public class Main {
    public static boolean isLuhn( String test ) {
    int s = 0;
    for( int i = test.length() – 1; i >= 0 ; i -= 2 )
    s += test.charAt( i ) – ‘0’;
    for( int i = test.length() – 2; i >= 0 ; i -= 2 )
    s += 2 * ( test.charAt( i ) – ‘0’ ) % 9;
    return ( s % 10 == 0 );
    }

    public static void main( String[] args ) {
    System.out.printf( “%s”, isLuhn( “446667651” ) ? “Luhn!” : “NOT Luhn!” );
    }
    }

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: