upceToUpca method

String upceToUpca(
  1. String data
)

Implementation

String upceToUpca(String data) {
  final RegExp exp = RegExp(r"^\d{6,8}$");
  final RegExpMatch? match = exp.firstMatch(data);

  if (match == null) {
    throw BarcodeException('Unable to convert "$data" to UPC A Barcode');
  }

  String first = "0";
  String? checksum;

  switch (data.length) {
    case 8:
      checksum = data[7];
      first = data[0];
      data = data.substring(1, 7);
      break;
    case 7:
      first = data[0];
      data = data.substring(1, 7);
      break;
  }

  if (first != "0" && first != "1") {
    throw BarcodeException('Unable to convert "$data" to UPC A Barcode');
  }

  final String d1 = data[0];
  final String d2 = data[1];
  final String d3 = data[2];
  final String d4 = data[3];
  final String d5 = data[4];
  final String d6 = data[5];

  String manufacturer;
  String product;

  switch (d6) {
    case "0":
    case "1":
    case "2":
      manufacturer = "$d1$d2${d6}00";
      product = "00$d3$d4$d5";
      break;
    case "3":
      manufacturer = "$d1$d2${d3}00";
      product = "000$d4$d5";
      break;
    case "4":
      manufacturer = "$d1$d2$d3${d4}0";
      product = "0000$d5";
      break;
    default:
      manufacturer = "$d1$d2$d3$d4$d5";
      product = "0000$d6";
      break;
  }

  data = first + manufacturer + product;
  return data + (checksum ?? checkSumModulo10(data));
}