فهرست منبع

Merge pull request #7 from Willy-JL/fix/docnum-q-z

Fix for document numbers containing Q-Z
Eric Betts 9 ماه پیش
والد
کامیت
552accde59
1فایلهای تغییر یافته به همراه7 افزوده شده و 40 حذف شده
  1. 7 40
      passy_common.c

+ 7 - 40
passy_common.c

@@ -101,53 +101,20 @@ void passy_mac(uint8_t* key, uint8_t* data, size_t data_length, uint8_t* mac, bo
 
 
 // https://en.wikipedia.org/wiki/Machine-readable_passport
 // https://en.wikipedia.org/wiki/Machine-readable_passport
 char passy_checksum(char* str) {
 char passy_checksum(char* str) {
-    uint8_t values[] = {
-        0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12,
-        13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-        // < = filler
-        // A = 10
-        // B = 11
-        // C = 12
-        // D = 13
-        // E = 14
-        // F = 15
-        // G = 16
-        // H = 17
-        // I = 18
-        // J = 19
-        // K = 20
-        // L = 21
-        // M = 22
-        // N = 23
-        // O = 24
-        // P = 25
-        // Q = 26
-        // R = 27
-        // S = 28
-        // T = 29
-        // U = 30
-        // V = 31
-        // W = 32
-        // X = 33
-        // Y = 34
-        // Z = 35
-    };
-
     size_t sum = 0;
     size_t sum = 0;
     uint8_t weight_map[] = {7, 3, 1};
     uint8_t weight_map[] = {7, 3, 1};
     for(uint8_t i = 0; i < strlen(str); i++) {
     for(uint8_t i = 0; i < strlen(str); i++) {
         uint8_t value;
         uint8_t value;
+        char c = toupper(str[i]);
         uint8_t weight = weight_map[(i % 3)];
         uint8_t weight = weight_map[(i % 3)];
-        if(str[i] >= '0' && str[i] <= '9') {
-            value = values[str[i] - '0'];
-        } else if(str[i] >= 'A' && str[i] <= 'Z') {
-            value = values[str[i] - 'A' + 10];
-        } else if(str[i] >= 'a' && str[i] <= 'z') {
-            value = values[str[i] - 'a' + 10];
-        } else if(str[i] == '<') {
+        if(c >= '0' && c <= '9') {
+            value = c - '0';
+        } else if(c >= 'A' && c <= 'Z') {
+            value = c - 'A' + 10;
+        } else if(c == '<') {
             value = 0;
             value = 0;
         } else {
         } else {
-            FURI_LOG_E(TAG, "Invalid character %02x", str[i]);
+            FURI_LOG_E(TAG, "Invalid character %02x", c);
             return -1;
             return -1;
         }
         }
         sum += value * weight;
         sum += value * weight;