30 milijonov kartic za bankomate 1.1.2010 ne deluje

Več milijonov nemcev je bilo v začetku leta neprijetno presenečenih. S prvim januarjem so jim namreč prenehale delovati kartice za bankomat. Sistem je namreč začel misliti, da je prišel 1. 1. 2016, zato kartice niso več hotele delovati. Še posebej veliko število kartic je odpovedalo pri Deutsche Bank - kar 30 000 000.

Stroški, če bi morali kartice zamenjati, bi bili gromozanski, okrog 10€ na kartico, skupaj torej 300M€.

Za probleme je krivo predvsem francosko - nizozemsko podjetje Gemalto, ki je izdelalo pokvarjene kartice. Predstavniki Gemalta so za težave sedaj našli rešitev, ki bo verjetno delovala, stala pa bo pičlih 6M€.

Enake probleme pri pretvarjanju med števili so opazili tudi na mobilnih telefonih z operacijskim sistemom Windows Mobile, kjer je OS sprejetim SMS sporočilom pripisal napačen datum,

Ampak zakaj bi sploh lahko prišlo do težav v letu 2010? Ta letnica menda ni tako čudna, kot je bila grozeča letnica 2000. Najverjetneje je do napake prišlo zaradi napačne pretvorbe iz formata BCD v navaden binarni zapis števil. Števila v računalnikih so namreč lahko zapisana na več načinov.

Običajno cela števila, manjša od neke meje, zapišemo tako, da poiščemo N-to potenco števila 2, ki je večja od te meje. Za zapis števil potem uporabimo N bitov, pri čemer jih razporedimo po vrsti. Tako za števila do 200 najdemo mejo 2^8=256, se pravi potrebujemo 8 bitov za zapis števila.

Če vnaprej ne vemo, kako dolga bodo števila, lahko namesto celega števila računamo s ciframi. Cifer imamo 10. Binarno jih zapišemo takole:

0 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 0 * 4 + 0 * 2 + 0 * 1 --> 0000
1 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 0 * 4 + 0 * 2 + 1 * 1 --> 0001
2 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 0 * 4 + 1 * 2 + 0 * 1 --> 0010
3 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 0 * 4 + 1 * 2 + 1 * 1 --> 0011
4 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 1 * 4 + 0 * 2 + 0 * 1 --> 0100
5 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1 --> 0101
6 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 1 * 4 + 1 * 2 + 0 * 1 --> 0110
7 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 --> 0111
8 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 1 * 8 + 0 * 4 + 0 * 2 + 0 * 1 --> 1000
9 = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 = 1 * 8 + 0 * 4 + 0 * 2 + 1 * 1 --> 1001.

Ta način zapisovanja števil imenujemo BCD - [[binary coded decimal]].

Letnico 2010 bi torej v zapisu BCD zapisali takole: 2010 = 0010 0000 0001 0000.
V računalnikih namesto s posameznimi biti delamo z byte-i, torej z osmerčki bitov. Zgornjo letnico bi torej zapisali kot: 2010 = 00100000 00010000. Če zadnjih 8 bitov upoštevamo kot navadno binarno 8-bitno število, dobimo: 0 * 128 + 0 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 0 * 4 + 0 * 2 + 0 * 1 = 16. Datum 2016 torej verjetno pride od napake pri pretvorbi, kjer je nek programer pozabil ločeno računati z dvema zaporednima ciframa števila, zapisanega kot BCD.