当你在互联网上购买商品时,你用于支付的信用卡需在服务端被特别的程序确认.其中的一项确认就是信用卡号码和类型是否有效.在大多数情况下是用这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: }
|
本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)