zoukankan      html  css  js  c++  java
  • 信用卡号码格式验证-C#实现

     1  /// <summary>
     2         /// Is valid?
     3         /// </summary>
     4         /// <param name="context">Validation context</param>
     5         /// <returns>Result</returns>
     6         protected override bool IsValid(PropertyValidatorContext context)
     7         {
     8             var ccValue = context.PropertyValue as string;
     9             if (string.IsNullOrWhiteSpace(ccValue))
    10                 return false;
    11 
    12             ccValue = ccValue.Replace(" ", "");
    13             ccValue = ccValue.Replace("-", "");
    14 
    15             var checksum = 0;
    16             var evenDigit = false;
    17 
    18             //http://www.beachnet.com/~hstiles/cardtype.html
    19             foreach (var digit in ccValue.Reverse())
    20             {
    21                 if (!char.IsDigit(digit))
    22                     return false;
    23 
    24                 var digitValue = (digit - '0') * (evenDigit ? 2 : 1);
    25                 evenDigit = !evenDigit;
    26 
    27                 while (digitValue > 0)
    28                 {
    29                     checksum += digitValue % 10;
    30                     digitValue /= 10;
    31                 }
    32             }
    33 
    34             return (checksum % 10) == 0;
    35         }

    判断信用卡卡号是否正确

     
    【信用卡号的验证】


    当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
    该校验的过程:
    1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
    2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
    3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
    例如,卡号是:5432123456788881


    则,奇数位和=35
    偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
    最后35+35=70 可以被10整除,认定校验通过。


    请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
    比如,用户输入:356827027232780
    程序输出:成功


    【参考测试用例】
    356406010024817     成功
    358973017867744     成功
    356827027232781     失败
    306406010024817     失败

    358973017867754     失败

     
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/micro-chen/p/11557928.html
Copyright © 2011-2022 走看看