Luhn算法

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

<%

    ' 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("446667651") then
        response.write "true"
    else
        response.write "false"
    end if
%>