Încercând să înţeleg de ce se spune că toate chip-urile din paşapoarte vor conţine un cod comun: 666, am revenit peste codul de validare a codurilor de bare EAN13 pe care l-am scris în vara anului 2006 ca să subliniez urmatoărele:
- primul for se execută de 6 ori (pentru poziţiile pare, de la 0 la 10)
- al doilea for se execută de 6 ori (pentru poziţiile impare, de la 1 la 11)
- prima cifră şi celelalte 2 perechi de câte 6 cifre sunt despărţite de câte o bară verticală
Acestea sunt cele 3 apariţii ale cifrei 6 pe care le-am putut găsi, în vara anului 2006, când am scris codul. Dacă ţinem cont că EAN13 are 13 cifre iar ultima cifră este o cifră de control, ne rămân 12 cifre, şi atunci este absolut normal ca 12/2 = 6 (adică din cele 12 cifre, 6 cifre să fie pe poziţii pare şi 6 cifre să fie pe poziţii impare).
European Article Number este un cod de bare folosit pentru
"articole" şi nu cred că va fi pus pe paşapoarte. Mai mult, era vorba despre microchip-uri şi nu despre coduri de bare.
Toată povestea asta cu numărul fiarei este invocată pentru a masca problemele reale pe care le ridică introducerea pasapoartelor biometrice:
- încălcarea intimităţii;
- crearea de mari oportunităţi pentru furtul de identitate;
- posibilitatea dispariţiei, în timp, a documentelor scrise şi a numerarului, care puteau fi falsificate mult mai greu decât datele stocate pe dispozitive electronice;
Iată codul (pentru curioşi):
public static function recalculate($code) {
$code = sprintf("%13.0f", $code);
if (strlen($code) != 13)
return false;
// primul for se executa de 6 ori
for ($i = 0, $a = 0; $i <= 10; $i += 2)
$a += $code[$i];
// al doilea for se executa de 6 ori
for ($i = 1, $b = 0; $i <= 11; $i += 2)
$b += $code[$i];
$sum = $a + 3 * $b;
$d = $sum % 10;
$rem = ($d != 0) ? (10 - $d) : $d;
$code[12] = $rem;
return $sum != 0 ? $code : false;
}