From 6eb1837b796f51bd2a84d091b706a7ae1d4952a0 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 7 Jul 2015 15:20:48 +1200 Subject: Improve Aplicom id parsing --- src/org/traccar/helper/Crc.java | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'src/org/traccar/helper') diff --git a/src/org/traccar/helper/Crc.java b/src/org/traccar/helper/Crc.java index 213d1192a..418ec3132 100644 --- a/src/org/traccar/helper/Crc.java +++ b/src/org/traccar/helper/Crc.java @@ -154,21 +154,25 @@ public class Crc { return String.format("*%02x", checksum).toUpperCase(); } - public static String luhnChecksum(String s) { - int sum = 0; - boolean evenPosition = true; - for (int i = s.length() - 1; i >= 0; i--) { - int n = Integer.parseInt(s.substring(i, i + 1)); - if (evenPosition) { - n *= 2; - if (n > 9) { - n = (n % 10) + 1; + public static long luhnChecksum(long imei) { + long checksum = 0; + long remain = imei; + + for (int i = 0; remain != 0; i++) { + long digit = remain % 10; + + if ((i % 2) == 0) { + digit *= 2; + if (digit >= 10) { + digit = 1 + (digit % 10); } } - sum += n; - evenPosition = !evenPosition; + + checksum += digit; + remain /= 10; } - return String.valueOf(10 - sum % 10); - } + + return 10 - (checksum % 10); + } } -- cgit v1.2.3