当你在互联网上购买商品时,你用于支付的信用卡需在服务端被特别的程序确认.其中的一项确认就是信用卡号码和类型是否有效.在大多数情况下是用这Luhn算法来实现的.
在本文中我们将建一个新类用于信用卡号的有效性检查,在这个过程中我们将返会一个布尔值 来进行校验.
在写代码前,先看看算法.
- 从右边的第二位开始往左到最后一位,每隔一位数乘以2.
- 看他们相加的和是否大于10.如果大于10,我们将乘积的右边和左边的数相加,得出的数再加到前面的和.
- 然后每相隔的项如第1,第3,第5等 加入到最后的等式.
- 完成以上步骤,我们将所有得出的数相加.如果和可以被10整除,则卡号有效;反之无效.
这里有一个简单的例子:
假定信用卡号为
4111-1111-1111-1111
4 1 1 1 - 1 1 1 1 - 1 1 1 1 - 1 1 1 1
x2 x2 x2 x2 x2 x2 x2 x2
--------------------------------------
8 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
当我们把这些数相加等于30.30可以被10整除,由此说明此卡号有效.下面我们开始写代码.
让我们从建立一个确定卡号是否有效的布尔返回值开始.
1: private bool ValidateCC(string creditNo) 2: { 3: int indicator = 1; 4: int firstNumToAdd = 0; 5: int secondNumToAdd = 0; 6: string num1; 7: 8: string num2; 9: 10: 11: 12: char[] ccArr = creditNo.ToCharArray(); 13: 14: for (int i=ccArr.Length-1;i>=0;i--) 15: { 16: char ccNoAdd = ccArr[i]; 17: int ccAdd = Int32.Parse(ccNoAdd.ToString()); 18: if (indicator == 1) 19: { 20: 21: 22: firstNumToAdd += ccAdd; 23: 24: 25: indicator = 0; 26: } 27: else 28: { 29: 30: 31: 32: if ((ccAdd + ccAdd) >= 10) 33: { 34: int temporary = (ccAdd + ccAdd); 35: num1 = temporary.ToString().Substring(0,1); 36: num2 = temporary.ToString().Substring(1,1); 37: secondNumToAdd += (Convert.ToInt32(num1) + Convert.ToInt32(num2)); 38: } 39: else 40: { 41: 42: secondNumToAdd += ccAdd + ccAdd; 43: } 44: 45: 46: indicator = 1; 47: } 48: } 49: . 50: 51: bool isValid = false; 52: if ((firstNumToAdd + secondNumToAdd) % 10 == 0) 53: { 54: isValid = true; 55: } 56: else 57: { 58: isValid = false; 59: } 60: return isValid; 61: }
|
让我们把以上的程序插入到Page Loag 事件中,在这个事件中我们引用以上代码, 并将我们的信用卡号当作参数传入.
1: private void Page_Load(object sender, System.EventArgs e) 2: { 3: if (Page.IsPostBack) 4: { 5: if (ValidateCC(CCNo.Text)) 6: { 7: Result.Text = "Is Valid!"; 8: } 9: else 10: { 11: Result.Text = "Nope!"; 12: } 13: } 14: } 15:
|
下一篇: 实现信用卡检查的自定义控件