zoukankan      html  css  js  c++  java
  • 验证银行卡

            /// <summary>
            /// Luhn校验:16位银行卡号(19位通用):
            /// </summary>
            /// <param name="cardNO"></param>
            /// <returns></returns>
            public static bool Luhn(this string cardNO)
            {
                //1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。
                //2.将奇位乘积的个十位全部相加(大于9则减9),再加上所有偶数位上的数字。
                //3.将加法和加上校验位能被 10 整除。
                //总和被10整除 则合法卡号
    
                //校验位
                int lastNum = int.Parse(cardNO.Substring(cardNO.Length - 1, 1));
                //取出15或18的卡号
                cardNO = cardNO.Substring(0, cardNO.Length - 1);
                int sum = 0;
    
                //是否奇数
                bool isOdd = true;
                for (int i = cardNO.Length - 1; i >= 0; i--)
                {
                    if (isOdd)
                    {
                        //奇数位乘2后个位与十位相加
                        int temp = int.Parse(cardNO.Substring(i, 1));
                        temp *= 2;
                        //大于9则减9
                        if (temp > 9)
                            temp -= 9;
                        sum += temp;
                    }
                    else
                    {
                        //偶数位
                        sum += int.Parse(cardNO.Substring(i, 1));
                    }
                    //前进一位则奇偶变换
                    isOdd = !isOdd;
                }
                return (sum + lastNum) % 10 == 0;//总和被10整除 则合法卡号
            }     
    

      

  • 相关阅读:
    update(十)
    perl-basic-数据类型&引用
    R-barplot()
    leetcode-22-string
    Java-basic-7-面向对象
    Java-basic-6-方法
    Java-basic-4-数据类型
    Java-basic-3-运算符-修饰符-循环
    Java-basic-2-
    leetcode-21-knapsack
  • 原文地址:https://www.cnblogs.com/beijing-Bob/p/4894748.html
Copyright © 2011-2022 走看看