代码下载专区
虚拟社区
CRM、OA技术
 站点首页  |  英语世界  |  编程园地  |  业界新闻  |  虚拟社区  |  代理专区  |  个人天地 
ASP.net实现信用卡检查和自定义确认控件(一)
------2003-5-1 22:44:43

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:

上篇文章:Visual C#资源文件编程--创建资源文件
下篇文章:ASP.net实现信用卡检查和自定义确认控件(二) 

『关闭窗口』
 关于我们 - 合作专栏 - 土人服务 - 站点地图 - 友情链接 - 联系我们 
建议您使用IE 4.x 或更高版本; 1024×768
Socent 版权所有 Design By Socent.com © 2002