Nadesłany przez Tomasz Lubiński, 07 grudnia 2011 21:23
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
ean5.js:
//EAN-5 //(c) 2011 by Tomasz Lubinski //www.algorytm.org var left = [ [ [0, 0, 0, 1, 1, 0, 1], [0, 0, 1, 1, 0, 0, 1], [0, 0, 1, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0, 1], [0, 1, 0, 0, 0, 1, 1], [0, 1, 1, 0, 0, 0, 1], [0, 1, 0, 1, 1, 1, 1], [0, 1, 1, 1, 0, 1, 1], [0, 1, 1, 0, 1, 1, 1], [0, 0, 0, 1, 0, 1, 1] ], [ [0, 1, 0, 0, 1, 1, 1], [0, 1, 1, 0, 0, 1, 1], [0, 0, 1, 1, 0, 1, 1], [0, 1, 0, 0, 0, 0, 1], [0, 0, 1, 1, 1, 0, 1], [0, 1, 1, 1, 0, 0 ,1], [0, 0, 0, 0, 1, 0, 1], [0, 0, 1, 0, 0, 0 ,1], [0, 0, 0, 1, 0, 0, 1], [0, 0, 1, 0, 1, 1, 1] ] ]; var checksumTable = [ [1, 1, 0, 0, 0], [1, 0, 1, 0, 0], [1, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 1, 1, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 1], [0, 1, 0, 1, 0], [0, 1, 0, 0, 1], [0, 0, 1, 0, 1] ]; function convert(EAN5) { /* inccorect length return null */ if ((EAN5 == null) || (EAN5.length != 5)) { return null; } try { var checkSum = 3*EAN5[0] + 9*EAN5[1] + 3*EAN5[2] + 9*EAN5[3] + 3*EAN5[4]; checkSum %= 10; var bars = new Array(47); for (i=0; i<47; i++) { bars[i] = 0; } bars[0] = 1; bars[1] = 0; bars[2] = 1; bars[3] = 1; for (i=0; i<5; i++) { for (j=0; j<7; j++) { bars[i*9 + 4 + j] = left[checksumTable[checkSum][i]][EAN5[i]][j]; } if (i<4) { bars[i*9 + 11] = 0; bars[i*9 + 12] = 1; } } } catch(e) { return null; } return bars; } //initialize data function generate(EAN5) { var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); /* clear canvas */ canvas.width = canvas.width; /* prepare style */ ctx.fillStyle = "rgb(0,0,0)"; ctx.font = "10pt Arial"; ctx.textBaseline = "top"; ctx.textAlign = "left"; var bars = convert(EAN5); if (bars != null) { for (i=0; i<bars.length; i++) { if (bars[i] == 1) { ctx.fillRect(i*2+20, 40, 2, 60); } } for (i=0; i<5; i++) { ctx.fillText(EAN5[i], i*17+30, 20); } } else { ctx.fillText("Nieprawidłowy", 10, 10); ctx.fillText("numer", 10, 25); ctx.fillText("Incorrect", 10, 50); ctx.fillText("number", 10, 65); } }