encode method

List<bool> encode(
  1. String data
)

Encodes 12 or 13 digits. A 12-digit payload gets its check digit.

Implementation

List<bool> encode(String data) {
  final String digits = data.trim();
  if (!RegExp(r'^\d{12,13}$').hasMatch(digits)) {
    throw ArgumentError.value(data, 'data', 'EAN-13 needs 12 or 13 digits');
  }
  final String body = digits.length == 12 ? '$digits${check(digits)}' : digits;
  if (digits.length == 13 && check(digits.substring(0, 12)) != digits[12]) {
    throw ArgumentError.value(data, 'data', 'EAN-13 check digit is wrong');
  }
  final String parity = _parity[int.parse(body[0])];
  final StringBuffer bits = StringBuffer('0000000101');
  for (int i = 0; i < 6; i++) {
    final int d = int.parse(body[i + 1]);
    bits.write(parity[i] == 'L' ? _l[d] : _g[d]);
  }
  bits.write('01010');
  for (int i = 0; i < 6; i++) {
    bits.write(_r[int.parse(body[i + 7])]);
  }
  bits.write('101000000');
  return <bool>[for (final int c in bits.toString().codeUnits) c == 0x31];
}