getMod10Sum method

int getMod10Sum({
  1. bool verbose = false,
})

Implementation

int getMod10Sum({bool verbose = false,}) {
  if (RegExp(r'\D',).hasMatch(this,)) {
    throw ArgumentError.value(
      this, 'String', 'is not a valid numeric String',
    );
  }
  final length = this.length;
  int sum = 0;
  bool multiply = true;
  StringBuffer? buffer;
  List<int>? dBuffer;
  if (verbose) {
    buffer = StringBuffer();
    dBuffer = [];
  }
  for (int i = length - 1; i >= 0; i--) {
    final digit = int.parse(this[i],);
    final factor = multiply ? 2 * digit : digit;
    if (factor > 9) {
      final x = factor % 10 + factor ~/ 10;
      sum += x;
      dBuffer?.add(x,);
    } else {
      sum += factor;
      dBuffer?.add(factor,);
    }
    multiply = !multiply;
  }
  if (dBuffer != null) {
    buffer?.write(
      dBuffer.join(' + ',),
    );
  }
  buffer?.write(' = $sum',);
  if (buffer != null) {
    debugPrint('Mod 10 for $this: $buffer',);
  }
  return sum;
}