Asp.net 提供了功能十分强大的确认控件, 我们可以轻松的使用,但有一些特别的确认需要我们自己 来处理,
我们还可以从确认控件的基类中继承出附合我们自己需求的确认控件. 这是一种十分实用的方法, 下面我向大家介绍这方面的二篇文章,
它们提供了具全的实现步骤,我想没有比这更好的入门了. 文章作者: David J. Gottlieb
翻译:raozr
当你在互联网上购买商品时,你用于支付的信用卡需在服务端被特别的程序确认.其中的一项确认就是信用卡号码和类型是否有效.在大多数情况下是用这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; //--
用于当每隔一位数相加的和大于10时,储存最左边的整数 7: 8: string
num2; //--
用于当每隔一位数相加的和大于10时,储存最右边的整数 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: //--
将标记设为0,使下一次循环跳过此程序段 24: 25: indicator
=
0; 26: } 27: else 28: { 29: //--
如果当前整数乘以2之后大于10,就将和分为两个整数并将它们相加, 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: //--
将标记设为1,我们就能对下一个整数执行不同的代码 45: 46: indicator
=
1; 47: } 48: } 49: //--
如果两个数的和被10整除,那么卡是有效的,否则,无效. 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:
|