# Class EAN13CheckDigit

java.lang.Object
org.apache.commons.validator.routines.checkdigit.ModulusCheckDigit
org.apache.commons.validator.routines.checkdigit.EAN13CheckDigit

All Implemented Interfaces:
  `Serializable, CheckDigit`

public final class EAN13CheckDigit extends ModulusCheckDigit
Modulus 10 EAN-13 / UPC / ISBN-13 Check Digit calculation/validation.

Check digit calculation is based on modulus 10 with digits in an odd position (from right to left) being weighted 1 and even position digits being weighted 3.

For further information see:

- EAN-13 - see Wikipedia - European Article Number.
- UPC - see Wikipedia - Universal Product Code.
- ISBN-13 - see Wikipedia - International Standard Book Number (ISBN).

Since:
  1.4
See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final CheckDigit`
  `EAN13_CHECK_DIGIT`
  Singleton EAN-13 Check Digit instance.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EAN13CheckDigit()`
  Constructs a modulus 10 Check Digit routine for EAN/UPC.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `isValid(String code)`
  Validates a modulus check digit for a code.
  `protected int`
  `weightedValue(int charValue, int leftPos, int rightPos)`
  Calculates the weighted value of a character in the code at a specified position.

  ### Methods inherited from class ModulusCheckDigit

  `calculate, calculateModulus, getModulus, sumDigits, toCheckDigit, toInt`
  Modifier and Type
  Method
  Description
  `String`
  `calculate(String code)`
  Calculates a modulus Check Digit for a code which does not yet have one.
  `protected int`
  `calculateModulus(String code, boolean includesCheckDigit)`
  Calculates the modulus for a code.
  `int`
  `getModulus()`
  Gets the modulus value this check digit routine is based on.
  `static int`
  `sumDigits(int number)`
  Adds together the individual digits in a number.
  `protected String`
  `toCheckDigit(int charValue)`
  Converts an integer value to a check digit.
  `protected int`
  `toInt(char character, int leftPos, int rightPos)`
  Converts a character at a specified position to an integer value.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### EAN13_CHECK_DIGIT

    public static final CheckDigit EAN13_CHECK_DIGIT
    Singleton EAN-13 Check Digit instance.

- ## Constructor Details

  - ### EAN13CheckDigit

    public EAN13CheckDigit()
    Constructs a modulus 10 Check Digit routine for EAN/UPC.

- ## Method Details

  - ### isValid

    public boolean isValid(String code)
    Validates a modulus check digit for a code.

    The weight is taken from `rightPos`, which does not change when a character is prepended, so `ModulusCheckDigit` would accept an over-length code whose leading digit lands on a no-op weight (for example a valid code with a `0` prepended). The thirteen-character length is checked here before the check digit test.

    Specified by:
      `isValid` in interface `CheckDigit`
    Overrides:
      `isValid` in class `ModulusCheckDigit`
    Parameters:
      `code` - The code to validate.
    Returns:
      `true` if the check digit is valid, otherwise `false`.

  - ### weightedValue

    protected int weightedValue(int charValue, int leftPos, int rightPos)
    Calculates the weighted value of a character in the code at a specified position.

    For EAN-13 (from right to left) odd digits are weighted with a factor of one and even digits with a factor of three.

    Specified by:
      `weightedValue` in class `ModulusCheckDigit`
    Parameters:
      `charValue` - The numeric value of the character.
      `leftPos` - The position of the character in the code, counting from left to right.
      `rightPos` - The position of the character in the code, counting from right to left.
    Returns:
      The weighted value of the character.