luhn计算最后一位校验位(ICCID,银行卡号)

来源:互联网 发布:微信朋友圈数据采集 编辑:程序博客网 时间:2024/06/12 01:34
Java:
  public static String luhnCardNo(String number){        int s1 = 0, s2 = 0;        number = number.substring(0, number.length()-1);        String reverse = new StringBuffer(number).toString();        for(int i = 0 ;i < reverse.length();i++){            int digit = Character.digit(reverse.charAt(i), 10);            if(i % 2 == 0){            s2 += 2 * digit;            if(digit >= 5){                    s2 -= 9;//乘机大于10取个位数与十位数相加总数                }            }else{            s1 += digit;            }        }        int last = 10 - (s1 + s2) % 10;        if(last == 10)        last = 0;                return (number + last);    }        public static boolean luhnCheck(String number){        int s1 = 0, s2 = 0;        String reverse = new StringBuffer(number).reverse().toString();        for(int i = 0 ;i < reverse.length();i++){            int digit = Character.digit(reverse.charAt(i), 10);            if(i % 2 == 0){                s1 += digit;            }else{                s2 += 2 * digit;                if(digit >= 5){                    s2 -= 9;                }            }        }        return (s1 + s2) % 10 == 0;    }



JavaScript:

function luhn(iccid) {var s1 = 0, s2 = 0;iccid = iccid.substring(0, iccid.length - 1);var reverse = '';for (var i = iccid.length; i > 0; i--) {reverse += iccid.charAt(i - 1);}for (i = 0; i < reverse.length; i++) {var digit = parseInt(reverse.charAt(i), 10);if (i % 2 != 0) {// this is for odd digits, they are 1-indexed in the// algorithms1 += digit;} else {// add 2 * digit for 0-4, add 2 * digit - 9 for 5-9s2 += 2 * digit;if (digit >= 5) {s2 -= 9;}}}var sum = 10 - (s1 + s2) % 10;if (sum == 10)sum = 0;return iccid + sum;}


附上原文地址:http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers

原创粉丝点击