// Chromis POS - The New Face of Open Source POS // Copyright (c) (c) 2015-2016 // http://www.chromis.co.uk // // This file is part of Chromis POS // // Chromis POS is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Chromis POS is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Chromis POS. If not, see <http://www.gnu.org/licenses/>. package uk.chromis.pos.util; /** * * @author John */ public class BarcodeValidator { public BarcodeValidator() { } public static String BarcodeValidate(String barcode) { if (barcode.matches("[0-9]+")) { int bSize = barcode.length(); int odd; int even; int checkDigit; int checkDigit2; switch (bSize) { case 7: odd = (Character.getNumericValue(barcode.charAt(0)) + Character.getNumericValue(barcode.charAt(2)) + Character.getNumericValue(barcode.charAt(4))) * 3; even = Character.getNumericValue(barcode.charAt(1)) + Character.getNumericValue(barcode.charAt(3)) + Character.getNumericValue(barcode.charAt(5)); checkDigit = (10 - ((odd + even) % 10)) % 10; if (checkDigit == Character.getNumericValue(barcode.charAt(6))) { return "UPC-E"; } else { return "null"; } case 8: odd = (Character.getNumericValue(barcode.charAt(0)) + Character.getNumericValue(barcode.charAt(2)) + Character.getNumericValue(barcode.charAt(4)) + Character.getNumericValue(barcode.charAt(6))) * 3; even = Character.getNumericValue(barcode.charAt(1)) + Character.getNumericValue(barcode.charAt(3)) + Character.getNumericValue(barcode.charAt(5)); checkDigit = (10 - ((odd + even) % 10)) % 10; if (checkDigit == Character.getNumericValue(barcode.charAt(7))) { return "EAN-8"; } else { return "null"; } case 12: odd = (Character.getNumericValue(barcode.charAt(0)) + Character.getNumericValue(barcode.charAt(2)) + Character.getNumericValue(barcode.charAt(4)) + Character.getNumericValue(barcode.charAt(6)) + Character.getNumericValue(barcode.charAt(8)) + Character.getNumericValue(barcode.charAt(10))) * 3; even = Character.getNumericValue(barcode.charAt(1)) + Character.getNumericValue(barcode.charAt(3)) + Character.getNumericValue(barcode.charAt(5)) + Character.getNumericValue(barcode.charAt(7)) + Character.getNumericValue(barcode.charAt(9)); checkDigit = (10 - ((odd + even) % 10))% 10; if (checkDigit == Character.getNumericValue(barcode.charAt(11))) { return "UPC-A"; } else { return "null"; } case 13: odd = (Character.getNumericValue(barcode.charAt(0)) + Character.getNumericValue(barcode.charAt(2)) + Character.getNumericValue(barcode.charAt(4)) + Character.getNumericValue(barcode.charAt(6)) + Character.getNumericValue(barcode.charAt(8)) + Character.getNumericValue(barcode.charAt(10))) * 3; even = Character.getNumericValue(barcode.charAt(1)) + Character.getNumericValue(barcode.charAt(3)) + Character.getNumericValue(barcode.charAt(5)) + Character.getNumericValue(barcode.charAt(7)) + Character.getNumericValue(barcode.charAt(9)) + Character.getNumericValue(barcode.charAt(11)); checkDigit = (10 - ((odd + even) % 10)) % 10; checkDigit2 = (10 - (((odd / 3) + (even * 3)) % 10))% 10; if (checkDigit == Character.getNumericValue(barcode.charAt(12))) { return "EAN-13"; } else if (checkDigit2 == Character.getNumericValue(barcode.charAt(12))) { return "EAN-13"; } else { return "null"; } case 14: odd = (Character.getNumericValue(barcode.charAt(0)) + Character.getNumericValue(barcode.charAt(2)) + Character.getNumericValue(barcode.charAt(4)) + Character.getNumericValue(barcode.charAt(6)) + Character.getNumericValue(barcode.charAt(8)) + Character.getNumericValue(barcode.charAt(10)) + Character.getNumericValue(barcode.charAt(12))) * 3; even = Character.getNumericValue(barcode.charAt(1)) + Character.getNumericValue(barcode.charAt(3)) + Character.getNumericValue(barcode.charAt(5)) + Character.getNumericValue(barcode.charAt(7)) + Character.getNumericValue(barcode.charAt(9)) + Character.getNumericValue(barcode.charAt(11)); checkDigit = (10 - ((odd + even) % 10)) % 10; if (checkDigit == Character.getNumericValue(barcode.charAt(13))) { return "GTIN"; } else { return "null"; } default: return "CODE128"; } } else { return "CODE128"; } } }