001package org.xbib.standardnumber.check; 002 003public class LuhnMOD10 implements Digit { 004 005 @Override 006 public String encode(String digits) { 007 return digits + compute(digits); 008 } 009 010 @Override 011 public boolean verify(String digits) { 012 return computeSum(digits) % 10 == 0; 013 } 014 015 @Override 016 public int compute(String digits) { 017 int val = computeSum(digits); 018 return (val == 0) ? 0 : (10 - val); 019 } 020 021 @Override 022 public int getDigit(String digits) { 023 return digits.charAt(digits.length() - 1) - '0'; 024 } 025 026 @Override 027 public String getNumber(String digits) { 028 return digits.substring(0, digits.length() - 1); 029 } 030 031 private int computeSum(String digits) { 032 int val = 0; 033 for (int i = 0; i < digits.length(); i += 2) { 034 int c = digits.charAt(i) - '0'; 035 val += c; 036 } 037 for (int i = 1; i < digits.length(); i += 2) { 038 int c = digits.charAt(i) - '0'; 039 val += (c >= 5) ? (2*c - 9) : (2*c); 040 } 041 return val % 10; 042 } 043}