Wpuść informatyka do sklepu, a zawsze coś nabroi. Jak się okazuje, zamiłowanie do inzynierii wstecznej może się przydać nawet w czasie zakupów. Brytyjski student fizyki twierdzi, że przypadkiem rozgryzł algorytm tworzenia kodów kreskowych dla przecenionych produktów w sklepach Tesco.
Matt Evans robił zakupy w brytyjskim Tesco, kiedy jego uwagę zwróciły batoniki energetyczne z bardzo niską ceną, których termin przydatności do spożycia upływał tego samego dnia. Zamiast zwyczajnych funta i 20 pensów, kosztowały one tylko 7 pensów za paczkę. Kiedy przyjrzał się ich kodowi kreskowemu, zwrócił uwagę na ciekawą zależność.
Matt zauważył, że kod kreskowy batonów z długą datą przydatności do spożycia to 5000221503354, podczas kiedy kod batonów przecenionych to 971500022150335460000708. Analiza kolejnych produktów wykazała, że kody rabatowe tworzone są według stałego algorytmu.
Po pierwsze, każdy z nich zaczyna się od cyfr 971. Potem pojawia się zwykły kod produktu. Kolejna cyfra (w tym wypadku 6) to na razie tajemnica. Po niej następuje 5 cyfr, które są ceną produktu po przecenie w pensach. Na końcu pojawia się jeszcze 0 oraz cyfra kontrolna. Cyfra kontrolna obliczana jest wg algorytmu: dodaj cyfry na parzystych pozycjach, dodaj cyfry na nieparzystych pozycjach i pomnóż sumę przez trzy, dodaj do siebie obie otrzymane sumy, policz resztę z dzielenia wyniku przez 10 i odejmij ją od 10.
Jedna cyfra w kodzie pozostaje tajemnicą – ale jako że jest tylko jedna, łatwo można ją potraktować jako zmienną i przetestować dla przedziału 0-9. Czy metoda działa? Według Matta sprawdza się dla przecenionych produktów, które znalazł w sklepie. Aby pozostać po dobrej stronie mocy, można próbować podawać kody kreskowe z klawiaturki czytnika kodów wyświetlającego ceny, w który wyposażony jest każdy sklep. Czy patent działa również w Polsce? Kiedyś okazało się, że można kupić w Tesco piwo za 6 groszy, więc wszystko jest możliwe. Nasi czytelnicy mieszkający blisko Tesco pewnie wkrótce sami sprawdzą. Pamiętajcie, aby nie skończyć jak pewien klient Tesco ze Stalowej Woli, informacje należy wykorzystywać tylko w celu edukacyjnym!
Aktualizacja 2012-07-24
W polskim Tesco schemat tworzenia kodów kreskowych towarów przecenionych jest identyczny, co widać na poniższych etykietach. Niestety kody rabatowe nie są prawidłowo odczytywane przez czytniki dostępne dla klientów znajdujące się w sklepie (brak odczytu), co utrudnia nieinwazyjne przeprowadzenie dalszych testów.
Komentarze
rozgryzł algorytm kodów tylko właściwie do czego ta wiedza mu się przyda ? przeciętny oszust wybierze prostszą metodę i poprostu skopiuje gotowy kod produktu
Rożnica jest prosta. Albo w kasie pojawi się np. telwizor za 599 PLN, który wyskoczy na kasie jako spawarka, albo pojawi się telewizor za 599 PLN, który wyskoczy na kasie jako telewizor w promocji. Zakładając oczywiście, że manipulacja kodem faktycznie działa.
Możesz sobie kupić nawet drukarkę zebra i gotowe rolki i co to ci da ? Nic bo każdy twój zrobiony kod nie bedzie istniał. Kazka przecena jest rejestrowana w gold i dopiero kod jest aktywny przez ok 14 dni. Mało tego wszystko widać ile takich kodów było zrobione i ile sie sprzedało. Nawet powiadomienie na kasie jest przy zakupie RTC.
W jaki sposób to miałoby się przydać w Polsce? Czy ktokolwiek widział, by u nas sprzedawano powoli przeterminowywujące się produkty po promocyjnych cenach? Raczej kupisz już zepsute po normalnej…
ten algorytm nie jest przecież niczym nowym
to crc16 z powodeniem u nas wykorzystywany w życiu publicznym..
Sposób tworzenia algorytmów fajny, ale całkowicie nieprzydatny z pozycji klienta/oszusta. Żeby promocja działała, kod promocyjny MUSI być wgrany w systemie kasowym i tym samym rozpoznawalny przez czytnik. Samo wygenerowanie kodu i na tej podstawie domaganie się tańszego produktu nie przejdzie.
A sposób generowania – no cóż, widocznie programiści uznali, że będzie łatwiej, jeśli dodane zostaną znaki do istniejącego już kodu, niż niepotrzebne generowanie następnych.
A czy potem z kasy usuwane są te kody? Jeśli nie, to nawet jeśli nie ma promocji osoba jest w stanie stworzyć sobie własny kod [ jeśli kody na dany produkt w danym sklepie nie zmieniają się ] wydrukować, przykleić na oryginalny kod i kupić taniej. Jeśli natomiast są usuwane to lipa, chyba że w chwili kiedy jest wyprzedaż bo towar staje się przeterminowany my chcemy kupić dużo takiego samego lecz nie przeterminowanego, wtedy podmieniając taki kod system nie wykryje żadnego błędu i kupi się o wiele taniej dobry towar.
Czyli nawet w kasie samoobsługowej to nie zadziała( gdzie sami możemy wpisać kod) , bo kod nie jest wpisany do bazy tak?
Ale się uśmiałem – rewelacja co za haker.
po pierwsze kod ten nie jest żadną tajemnicą wystarczy poczytać o kodach kreskowych i wszystko jest jawne i opisane jest to znana metoda wykonywania przecen w systemach gdzie kasami są komputery
Jest prefiks trzycyfrowy później jest zwykły ean 13 cyfr jeżeli krótszy to uzupełniony zerami jeżeli z wagą to zawsze z 1 kg. oczywiście z cyfrą kontrolną kodu ean, następnie cena produktu i na końcu cyfra kontrola całości kodu.
Proste jak drut.
kody nie są ładowane do kas gdyż do kas ładowane są eany produktow a ten kod (jest de fakto w systemie ean128) interpretowany jest przez kasę a kasa wie na ile przecenić produkt bo jest też w nim cena, kasy to zwykłe koputery i codziennie otrzymują transmisję a drukarki fiskalne do nich podłączone pamiętają nazwa + przypisana do niej stawka vat.
Co do możliwości zakupu to każda kasjerka sprawdzi co kupujesz po przecenionej cenie i na pewno nie sprzeda Ci telewizora za bzdurną cenę.
Jeżęli ktoś chce dokładną specyfikację budowania kodów ean13 ean8 ean128 zarówno zwykłych jak i wagowych (mają dwie cyfry kontrolen jedna wagi a druga całości kodu) wraz z algorytmami obiczania cyfr kontrolnych i tworzenia pasków to oczywiście posiadam.
a i jeszcze cyfra kontrolna niewiadoma (czyli ta 6 która de fakto nie jest 6) jest obliczana na podstawie ceny
Kod kreskowy to nie jest EAN128 tylko Code128. Różnica niby mała, ale jednak. Prefiks 971 nie jest używany przez system EAN – GS1 i dlatego został wybrany do tych towarów przecenionych.
Aby uzyskać prawidłowy kod kreskowy dla przykładowego numeru 9715 9020 2049 5079 9001 5901 należy go wpisywać bez spacji w generatorze Code128.
Niestety połowa zdania „Jest prefiks trzycyfrowy później jest zwykły ean 13 cyfr jeżeli krótszy to uzupełniony zerami jeżeli z wagą to zawsze z 1 kg. oczywiście z cyfrą kontrolną kodu ean, następnie cena produktu i na końcu cyfra kontrola całości kodu.
Proste jak drut.” jest błędna.
Niby kody są tworzone w ten sam sposób lecz suma kontrolna liczona jest już w inny sposób. A co do algorytmu obliczania sumy kontrolnej batonika to wygląda on następująco: dodaj wszystkie cyfry z kodu kreskowego bez ostatniej czyli kontrolnej. Pomnóż przez 0.3 i odejmij od tego 10. I tyle. Jedno trywialne równanie, którego i tak nie możemy sprawdzić czy jest właściwe mając tylko jeden angielski kod kreskowy. Autor nie miał pojęcia jak i ten student, że mnożenie jest rozdzielne względem dodawania, oraz, że wynik dzielenia to iloraz a nie reszta, a z kolei autor tego artykułu bezmyślnie to przetłumaczył. Ogólnie cały opis obliczeń, które mają zostać wykonane został chyba bez sensu przetłumaczony z jakiegoś zagranicznego artykułu.