All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pnuema.java.barcode.symbologies.UPCSupplement2 Maven / Gradle / Ivy

package com.pnuema.java.barcode.symbologies;

import com.pnuema.java.barcode.BarcodeCommon;
import com.pnuema.java.barcode.IBarcode;

/**
 * UPC Supplement-2 encoding
 */
public class UPCSupplement2 extends BarcodeCommon implements IBarcode {
    private final String[] EAN_CodeA = {"0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011"};
    private final String[] EAN_CodeB = {"0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111"};
    private final String[] UPC_SUPP_2 = {"aa", "ab", "ba", "bb"};

    public UPCSupplement2(String input) {
        setRawData(input);
    }

    /**
     * Encode the raw data using the UPC Supplemental 2-digit algorithm.
     * @return Encoded value
     */
    private String encodeUPCSupplemental2() {
        if (getRawData().length() != 2) {
            error("EUPC-SUP2-1: Invalid data length. (Length = 2 required)");
        }

        //check numeric only
        if (!checkNumericOnly(getRawData())) {
            error("EUPC-SUP2-2: Numeric Data Only");
        }

        String pattern = "";

        try {
            pattern = this.UPC_SUPP_2[Integer.parseInt(getRawData().trim()) % 4];
        } catch (Exception ex) {
            error("EUPC-SUP2-3: Invalid Data. (Numeric only)");
        }

        StringBuilder result = new StringBuilder("1011");

        int pos = 0;
        for (char c : pattern.toCharArray()) {
            if (c == 'a') {
                //encode using odd parity
                result.append(EAN_CodeA[Integer.parseInt(String.valueOf(getRawData().toCharArray()[pos]))]);
            } else if (c == 'b') {
                //encode using even parity
                result.append(EAN_CodeB[Integer.parseInt(String.valueOf(getRawData().toCharArray()[pos]))]);
            }

            if (pos++ == 0) {
                result.append("01"); //Inter-character separator
            }
        }
        return result.toString();
    }

    public String getEncodedValue() {
        return encodeUPCSupplemental2();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy