Я думаю, что нашел решение. Вместо простого представления алгоритма декодирования я хотел бы показать вам аргументацию.
Ответ на вопрос linked показал, что это был штрих-код в формате EAN-13.
Это означает, что коды имеют 12 цифр и 1 контрольный символ:
11.11.2010 16:23 > 525242537257 5
16.11.2010 15:30 > 525292246256 4
19.11.2010 15:39 > 525223156251 1
19.11.2010 15:43 > 525223556250 0
Контрольная цифра может быть вычислена с помощью
- добавления значения цифр в четных позициях: 2 , 4, 6 ... (2 + 2 + 2 + 3 + 2 + 7 = 18)
- умножая этот результат на 3 (18 * 3 = 54)
- , добавляя значения цифр в нечетно- нумерованные позиции: 1, 3, 5 ... (5 + 5 + 4 + 5 + 7 + 5 = 3 1)
- суммирования двух результатов (54 + 31 = 85)
- по модулю 10 вычислени и вычитания ее из 10 (5-10 = 5)
Я вычислил контрольную цифру для каждого кода, то согласованы и подтверждены, коды были в формате EAN-13.
Согласно спецификации, первые две или три цифры кода могут быть коды стран, поэтому я попытался отделить их:
11.11.2010 16:23 > 52 5242537257 5 | 525 242537257 5
16.11.2010 15:30 > 52 5292246256 4 | 525 292246256 4
19.11.2010 15:39 > 52 5223156251 1 | 525 223156251 1
19.11.2010 15:43 > 52 5223556250 0 | 525 223556250 0
Полученные числа не имеет никакого смысла, потому что раньше время имели большее количество:
или
, чем позже:
или
На данный момент я подозревал, что время не хранилось в двоичном формате. Я реорганизовал цифры и попытался найти повторяющиеся узоры.
я закончил с этим макетом:
11.11.2010 16:23 > 52 52 42 53 72 57 5
16.11.2010 15:30 > 52 52 92 24 62 56 4
19.11.2010 15:39 > 52 52 23 15 62 51 1
19.11.2010 15:43 > 52 52 23 55 62 50 0
Это где все стало интересно ...
Взгляните на 3-м и 4-м ряд, это те же, за исключением 4-го и 6-го столбца.
4-й столбец имеет и . Переведите его назад, и вы получите и .
Разность двух является 55 - 51 = 4 так же, как разность минут 43 - 39 = 4
Вычесть минут от кодовых значений:
55 - 43 = 12
51 - 39 = 12
Кажется, что 4-й столбец кодирует минуты, добавляя 12 и сохраняя цифры назад.
Теперь попробуйте применить это к 5-й колонке:
11.11.2010 16:23 > 72 > 27
16.11.2010 15:30 > 62 > 26
19.11.2010 15:39 > 62 > 26
19.11.2010 15:43 > 62 > 26
26 - 15 = 11 и 27 - 16 = 11 поэтому разница в 5-м столбце 11.
С тех пор это легко, различия для столбцов - 15, 14, 13, 12 & 11.
Несколько быстрых расчетов и вы получите схему кодирования:
Digits Meaning Diff.
2-1 year 15
4-3 month 14
6-5 day 13
8-7 minute 12
10-9 hour 11
Вот простой фрагмент коды для декодирования:
union TimeFormat
{
unsigned short codearray[5];
struct
{
unsigned short year;
unsigned short month;
unsigned short day;
unsigned short minute;
unsigned short hour;
};
};
void DecodeBarcode(char *code, TimeFormat *time)
{
char buf[3]; // for atoi()
buf[2] = 0; // of course it has to be null-terminated
for (int i = 0, diff = 15; i < 5; ++i, --diff)
{
buf[0] = code[i * 2 + 1];
buf[1] = code[i * 2];
time->codearray[i] = atoi(buf) - diff;
}
time->year += 2000;
}
дать еще несколько пар, на одную пару мы не можем сделать много, потому что один является менее – Svisstack 2010-11-23 22:37:21
Вы проверили для инвариантных частей, то есть каждый штрих-код начинается с `525` и заканчивается` 500`? – Actorclavilis 2010-11-23 22:38:02
убедитесь, что эти цифры хороши, потому что не вы и так сообщество могут потратить некоторое время на поисковую проблему в другом месте. – Svisstack 2010-11-23 22:39:43