`

Credit Card Mod10 校验

 
阅读更多

以下是几种Mod10的实现。第一种最为简洁,最后一种最为易懂。你喜欢哪一种?

    /**

     * Check whether a credit card number is valid or not according to the Luhn algorithm (MOD10).<br/>

     * <br/>

     * (Getting from http://en.wikipedia.org/wiki/Luhn_algorithm)<br/>

     * 1. Counting from the check digit, which is the rightmost, and moving left, double the value of every second digit.<br/>

     * 2. Sum the digits of the products together with the undoubled digits from the original number.<br/>

     * 3. If the total ends in 0 (put another way, if the total modulo 10 is equal to 0), then the number

     *    is valid according to the Luhn formula; else it is not valid.<br/>

     * <br/>

     * As an illustration, if the account number is 49927398716, it will be validated as follows:<br/>

     * i.   Double every second digit, from the rightmost:<br/>

     *     (1×2) = 2, (8×2) = 16, (3×2) = 6, (2×2) = 4, (9×2) = 18<br/>

     * ii.  Sum all the individual digits (digits in parentheses are the products from Step 1):<br/>

     *      6 + (2) + 7 + (1+6) + 9 + (6) + 7 + (4) + 9 + (1+8) + 4 = 70<br/>

     * iii. Take the sum modulo 10: 70 mod 10 = 0; the account number is valid.<br/>

     *

     * @param num

     * @return boolean true-valid; false-invalid

     */

    public static boolean isValidCC(String num) {

//          //Check digits

//          if(!num.matches("^\\d{13,19}$"))

//                return false;

           

            //Check mod10

            final int[][] sumTable = {{0,1,2,3,4,5,6,7,8,9},{0,2,4,6,8,1,3,5,7,9}};

            int sum = 0, flip = 0;

           

            for (int i = num.length() - 1; i >= 0; i--, flip++){

                  int n = num.charAt(i) - '0';

                  if (n < 0 || n > 9)

                        return false;

                  sum += sumTable[flip & 0x1][n];

            }

            return (sum == 0) ? false : (sum % 10 == 0);

        }

     

    /**

     * Check whether a credit card number is valid or not according to the Luhn algorithm (MOD10).<br/>

     * Used switch to double specified value.<br/>

     *

     * @param number

     * @return

     */

      public static boolean isValidCC1(String number) {

            int sum = 0;

           

            int mul = 1;

            for (int i = number.length() - 1; i >= 0; i--) {

                  int n = number.charAt(i) - '0';

                  if (n < 0 || n > 9)

                        return false;

                 

                  n *= (mul == 1) ? mul++ : mul--;

                  sum += (n>9 ? n-9 : n);

            }

 

            return (sum == 0) ? false : (sum % 10 == 0);

      }

     

      /**

       * Check whether a credit card number is valid or not according to the Luhn algorithm (MOD10).<br/>

       * Used position to double specified value.<br/>

       *

       * @param number

       * @return

       */

      public static boolean isValidCC2(String number) {

            int sum = 0;

           

            for (int i = number.length() - 1; i >= 0; i--) {

                  int n = number.charAt(i) - '0';

                  if (n < 0 || n > 9)

                        return false;

 

                  if ((number.length()-i)%2 == 0)

                        n *= 2;

 

                  sum += (n>9 ? n-9 : n);

            }

 

            return (sum == 0) ? false : (sum % 10 == 0);

      }

     

      /**

       * Check whether a credit card number is valid or not according to the Luhn algorithm (MOD10).<br/>

       * Used AND and XOR to double specified value.<br/>

       * @param number

       * @return

       */

      public static boolean isValidCC3(String number) {

            int digits = number.length();

            int oddOrEven = digits & 1;

            long sum = 0;

            for (int i = 0; i < digits; i++) {

                  int n = number.charAt(i) - '0';

                  if (n < 0 || n > 9)

                        return false;

                 

                  if (((i & 1) ^ oddOrEven) == 0)

                        n *= 2;

                  sum += (n>9 ? n-9 : n);

            }

 

            return (sum == 0) ? false : (sum % 10 == 0);

      }

 

      /**

       * Check whether a credit card number is valid or not according to the Luhn algorithm (MOD10).<br/>

       * Used a variable as switch to double specified value.

       * @param number

       * @return

       */

      private static boolean isValidCC4(String number) {

            int sum = 0;

 

            boolean alternate = false;

            for (int i = number.length() - 1; i >= 0; i--) {

                  int n = Integer.parseInt(number.substring(i, i + 1)); //May throw out a runtime exception

                  if (n < 0 || n > 9)

                        return false;

                  if (alternate)

                        n *= 2;

                  sum += (n>9 ? n%10 + 1 : n);

                  alternate = !alternate;

            }

 

            return (sum == 0) ? false : (sum % 10 == 0);

      }

 

信用卡前缀及校验规则

CARD TYPE Prefix Length Check digit algorithm
MASTERCARD 51-55 16 mod 10
VISA 4 13, 16 mod 10
AMEX 34 
37
15 mod 10
Diners Club/
Carte Blanche
300-305
36
38
14 mod 10
Discover 6011 16 mod 10
enRoute 2014
2149
15 any
JCB 3 16 mod 10
JCB 2131
1800
15 mod 10

分享到:
评论

相关推荐

    11贷款预测-creditcard.csv 数据集.zip

    11贷款预测-creditcard.csv 数据集.zip11贷款预测-creditcard.csv 数据集.zip11贷款预测-creditcard.csv 数据集.zip11贷款预测-creditcard.csv 数据集.zip11贷款预测-creditcard.csv 数据集.zip

    creditcard csv - 训练集

    《信用卡数据训练集详解——基于creditcard.csv》 在当今数字化时代,数据分析在各个领域都发挥着至关重要的作用,特别是在金融行业中,信用卡交易数据分析成为预测欺诈行为、优化风险管理和提升客户体验的重要工具...

    kaggle-Credit Card Fraud代码加数据集

    Kaggle平台上的“Credit Card Fraud”项目提供了一个宝贵的数据集,用于研究和开发欺诈检测模型。本项目主要关注的是如何处理不平衡数据集,并使用逻辑回归(Logistic Regression)算法来识别潜在的欺诈交易。 首先...

    信用卡的验证 CreditCard

    本文将深入探讨“CreditCard”这个主题,包括信用卡验证的原理、常见类型的信用卡以及如何使用JavaScript(Jscript)进行验证。 信用卡验证主要目的是确保提供的卡号是有效的,并且与发卡机构的相关规则匹配。通常...

    creditcard.zip

    本资料包“creditcard.zip”聚焦于这个话题,包含了一个名为“creditcard.csv”的CSV数据集以及一个名为“sss.txt”的文本文件。我们将深入探讨信用卡欺诈检测这一领域,以及如何利用这些数据进行分析。 一、信用卡...

    一个功能强大的CreditCard验证码控件源码及例子CreditCardValidator_v3_source_Example

    在IT行业中,CreditCardValidator是一个专门用于验证信用卡号合法性的工具或控件。这个压缩包“CreditCardValidator_v3_source_Example”包含了该控件的源代码和示例,可以帮助开发者更好地理解和应用这个功能强大的...

    creditcard训练集(PAC处理)

    creditcard训练集经处理,

    UCI_Credit_Card.csv.zip

    本数据集"UCI_Credit_Card.csv.zip"源自2005年的台湾地区,涵盖了4月至9月期间的信用卡用户数据,旨在研究信用卡用户的违约付款行为。这个数据集是数据科学和机器学习领域的重要资源,特别是对于信用风险评估、客户...

    交易数据异常检测--creditcard.zip

    交易数据异常检测--creditcard.zip

    credit card class

    此文件是Java中的credit card class, 其中包含了 卡号鉴别器。

    creditcard

    从给定的文件信息来看,这是一份关于信用卡账单的详细记录,涉及到了信用卡的使用、还款、消费明细以及积分情况等多个方面的知识点。下面,我们将对这些知识点进行详细的解析。 ### 一、信用卡账单的基本构成 ...

    creditcard.js, 在JavaScript中,一个简单的信用卡验证库.zip

    creditcard.js, 在JavaScript中,一个简单的信用卡验证库 creditcard.js JavaScript中一个简单的信用卡验证库。安装你可以下载zip文件,或者使用NPM和 Bower 。 NPM$ npm install --save creditcard.js

    Credit card OCR with OpenCV and Python.zip

    信用卡OCR(Optical Character...综上所述,"Credit card OCR with OpenCV and Python"项目涉及了计算机视觉、图像处理、模板匹配和Python编程等多个领域,通过这些技术实现了从信用卡图像中自动提取并识别卡号的功能。

    CreditCard Java实现的简单信用卡

    - "CreditCard"可能包含多个Java源文件,如`CreditCard.java`、`BankAccount.java`、`Transaction.java`等,分别对应不同的类。 以上是对"CreditCard Java实现的简单信用卡"项目的主要知识点概述,实际的实现可能...

    线性回归建模及模型诊断数据集--creditcard_exp.csv

    该数据集为《线性回归建模及模型诊断数据集》文章中用到的数据集,可供下载进行探索

    Credit Card beta1.0.20100115

    Credit Card beta1.0.20100115信用卡基础知识 银行系统开发,银行业务知识整理完成 银行业务知识汇编全稿

    sec.zip_VISA credit card_Word by Word_credit card_mastercard_pay

    In the present, I focus on security protocols in the electronic payment, particularly electronic security protocol set developed by a group of large credit card companies like Visa, MasterCard and ...

    UCI_Credit_Card.csv数据集信息 此数据集包含有关2005年4月至2005年9月台湾地区信用卡客户的默认付款

    SAS 信用卡 UCI数据 数据集信息 ... 内容 ...LIMIT_BAL:以新台币计的给定信用额度(包括个人和家庭/辅助信用额) ...教育程度:(1 =研究生院,2 =大学,3 =高中,4 =其他,5 =未知,6 =未知) ...BILL_AMT2:2005年

Global site tag (gtag.js) - Google Analytics