Citat:
Ursprungligen postat av Calo
Tack för svar! Men jag förstår inte riktigt: "två biljetter med samma sCODE ger i den nya versionen samma resultat varje gång emedan i den gamla versionen skulle bokstäverna slumpas varje gång". Var ser man ett mönster som följer en algoritm? I mina omatematiska ögon ser det fortfarande slumpat ut, hehe.
Menar du att du inte ser algoritmen i källkoden eller i biljetten? I källkoden ser det ut såhär i varje fall...
Citat:
sCode = Utils.generateRandomString(11, false) + gNumbers[0] + gNumbers[1] + gNumbers[2];
String hexCode = Utils.decToHex(sCode);
sAEOX = Utils.hexToAEOX(hexCode);
...och för övrigt ska man flytta } som följer direkt efter så att det är ovanför istället för att lösa problemet med force close med reducerad biljett, men åter till saken.
sCode består av 15 helt slumpmässiga siffror, det framgår inte i koden här men gNumbers är också slumpmässigt genererad och läggs till i sCode på detta sättet därför att de tre sista siffrorna är samma som numret biljetten kommer från. Sen konverteras sCode till hexadecimalt format vilket inte ändrar värde utan bara hur vi representerar värdet på sCode så att det ska passa i funktionen hexToAEOX där magin sker.
Indeed...
Citat:
public static String[] hexAEOX = { "OO", "OX", "OA", "OE", "XO", "XX", "XA",
"XE", "AO", "AX", "AA", "AE", "EO", "EX", "EA", "EE"
};
...
public static String hexToAEOX(String hex) {
String AEOX = "";
for (int i = 0; i < hex.length(); i++) {
char hexChar = hex.charAt(i);
String sHex = Character.toString(hexChar);
AEOX += hexAEOX[Integer.parseInt(sHex, 16)];
}
return AEOX;
}
Alltså det som händer är att den tar en hexadecimal siffra och substituerar den rakt upp och ner enligt hexAEOX listan. Alltså om den hexadecimala siffran är 0 blir det OO är den tex 5 blir det XX och siffran a blir AA.
Om det här är den äkta algoritmen och allting stämmer så är det hur bra som helst men är det inte så så finns det specialfall där de decimala och hexadecimala siffrorna slutar på samma siffra, i dessa fall givet att hexAEOX alltså inte är i korrekt ordning skulle man med blotta ögat och lite brain relativt lätt kunna se att biljetten är falsk. Detta var dock bara min första ide och det är knappast så de ser att biljetten är falsk eftersom även om det är möjligt att lära sig är det inte tillräckligt simpelt för att vanliga spärrvakter skulle orka engagera sig.
//AlgoJerViA