encodeShareCode function

String encodeShareCode(
  1. int familyId,
  2. int engineVersion,
  3. int seed
)

Encodes a payload as XXXXX-XXXXX. familyId 0–31, engineVersion 0–63; seed is taken modulo 2^32.

Implementation

String encodeShareCode(int familyId, int engineVersion, int seed) {
  if (familyId < 0 || familyId > 31) {
    throw RangeError.range(familyId, 0, 31, 'familyId');
  }
  if (engineVersion < 0 || engineVersion > 63) {
    throw RangeError.range(engineVersion, 0, 63, 'engineVersion');
  }
  final bits = <int>[];
  _pushBits(bits, familyId, 5);
  _pushBits(bits, engineVersion, 6);
  _pushBits(bits, seed & 0xFFFFFFFF, 32);
  _pushBits(bits, crc7(bits), 7);
  final sb = StringBuffer();
  for (var i = 0; i < 50; i += 5) {
    if (i == 25) sb.write('-');
    sb.write(crockfordAlphabet[_readBits(bits, i, 5)]);
  }
  return sb.toString();
}