Skip to content

Commit

Permalink
Using even more char codes now in the Dart version.
Browse files Browse the repository at this point in the history
  • Loading branch information
jpedrosa committed Nov 22, 2011
1 parent c0e6ab1 commit a7c95a8
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
25 changes: 12 additions & 13 deletions luhn.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,29 @@ class Luhn {
return total % 10 == 0;
}

String mask(String s) {
String mask(List charCodes) {
var masked = null;
var i = 0;
var digitCount = 0;
var maskOffset = -1;
var digits = [];
var len = s.length;
var len = charCodes.length;
while (i < len) {
var c = s[i].charCodeAt(0);
var c = charCodes[i];
if (c >= 48 && c <= 57) { //between 0 and 9
digitCount += 1;
digits.add(c - 48);
if (digitCount >= 14) {
for (var theLen = digitCount < 16 ? digitCount : 16; theLen >= 14; theLen--) {
var startAt = digitCount - theLen;
if (testIt(digits, startAt, theLen)) {
if (masked === null) { masked = s.splitChars(); }
if (masked === null) { masked = charCodes.getRange(0, len); }
var j = i;
var maskLen = theLen;
while (maskLen > 0 && j > maskOffset) {
var mc = s.charCodeAt(j);
var mc = charCodes[j];
if (mc >= 48 && mc <= 57) { //between 0 and 9
masked[j] = 'X';
masked[j] = 88; //X
maskLen -= 1;
}
j -= 1;
Expand All @@ -55,7 +55,7 @@ class Luhn {
}
i += 1;
}
return masked !== null ? Strings.concatAll(masked) : s;
return masked !== null ? masked : charCodes;
}

readRawLines(fn) {
Expand All @@ -68,18 +68,18 @@ class Luhn {
if (a[i] == 10) { // Newline, \n.
if (saved !== null) {
saved.addAll(a.getRange(startAt, i - startAt));
fn(new String.fromCharCodes(saved));
fn(saved);
saved = null;
} else {
fn(new String.fromCharCodes(a.getRange(startAt, i - startAt)));
fn(a.getRange(startAt, i - startAt));
}
startAt = i + 1;
}
}
if (startAt < len) { saved = a.getRange(startAt, len - startAt); }
}
if (saved !== null) {
fn(new String.fromCharCodes(saved.getRange(startAt, len - startAt)));
fn(saved.getRange(startAt, len - startAt));
}
}

Expand All @@ -92,11 +92,11 @@ class Luhn {
readRawLines((s) => lines.add(s));
for (var i = 0; i < nRepeats; i++) {
for (s in lines) {
print(mask(s));
print(new String.fromCharCodes(mask(s)));
}
}
} else {
readRawLines((s) => print(mask(s)));
readRawLines((s) => print(new String.fromCharCodes(mask(s))));
}
exit(0);
}
Expand All @@ -106,4 +106,3 @@ class Luhn {




2 changes: 1 addition & 1 deletion luhny.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ void sampleTest() {
];
var luhn = new Luhn();
for (var s in samples) {
print(luhn.mask(s));
print(new String.fromCharCodes(luhn.mask(s.charCodes())));
}
}

Expand Down

0 comments on commit a7c95a8

Please sign in to comment.