ASP Luhn检验数字算法函数 Luhn Check Digit Algorithm Fun()

王朝学院·作者佚名  2009-05-05
窄屏简体版  字體: 小  |  中  |  大  |  超大  

因为用到信用卡验证,就找了一下,找到以下知识及函数,先普及一下知识:

Luhn 检验数字算法(Luhn Check Digit Algorithm,Luhn Algorithm,LUHN Formula)

Luhn 检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn 检验数字算法属于大众,任何人都可以使用它。

算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。

函数:

程序代码

<%

' Copyright (c) 2008, reusablecode.blogspot.com; some rights reserved.

'

' This work is licensed under the Creative Commons Attribution License. To view

' a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ or

' send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California

' 94305, USA.

' Luhn (mod 10) algorithm

function luhn(byVal input)

dim sum

dim odd

dim currentDigit

dim regEx

input = CStr(input)

sum = 0

odd = CBool(len(input) mod 2)

' Remove any non-numeric characters.

if not isNumeric(input) then

set regEx = new RegExp

regEx.Global = true

regEx.Pattern = "\D"

input = regEx.Replace(input, "")

set regEx = nothing

end if

' Calculate sum of digits.

for i = 1 to len(input)

currentDigit = cint(mid(input, i, 1))

if odd then

sum = sum + currentDigit

else

if currentDigit * 2 > 9 then

sum = sum + (currentDigit * 2 - 9)

else

sum = sum + (currentDigit * 2)

end if

end if

odd = not odd

next

' Check validity.

if sum mod 10 = 0 then

luhn = true

else

luhn = false

end if

end function

' Unit test - expected result is true

if luhn("9558821402001225732") then

response.write "true"

else

response.write "false"

end if

%>

注:卡号是百度上随便搜的,如有不妥敬请告知。有需要此函数的朋友可以自行搜索或者拿自己卡号做测试。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航