algorytm.org

Implementacja w JavaScript



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

EAN-13 - Implementacja w JavaScript
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 19 lipca 2011 15:00
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.

ean13.js:
//EAN-13
//(c) 2010 by Tomasz Lubinski
//www.algorytm.org

  var parityTable = [
      [0, 0, 0, 0, 0, 0],
      [0, 0, 1, 0, 1, 1],
      [0, 0, 1, 1, 0, 1],
      [0, 0, 1, 1, 1, 0],
      [0, 1, 0, 0, 1, 1],
      [0, 1, 1, 0, 0, 1],
      [0, 1, 1, 1, 0, 0],
      [0, 1, 0, 1, 0, 1],
      [0, 1, 0, 1, 1, 0],
      [0, 1, 1, 0, 1, 0]
  ];

  var right = [
      [1, 1, 1, 0, 0, 1, 0],
      [1, 1, 0, 0, 1, 1, 0],
      [1, 1, 0, 1, 1, 0, 0],
      [1, 0, 0, 0, 0, 1, 0],
      [1, 0, 1, 1, 1, 0, 0],
      [1, 0, 0, 1, 1, 1, 0],
      [1, 0, 1, 0, 0, 0, 0],
      [1, 0, 0, 0, 1, 0, 0],
      [1, 0, 0, 1, 0, 0, 0],
      [1, 1, 1, 0, 1, 0, 0]
  ];

  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]
    ]
   ];
          
          
function convert(EAN13) {
    
    /* inccorect length or check sum, return null */
    if ((EAN13 == null) ||
      (EAN13.length != 13) || 
      (checkSum(EAN13) == false)) {
      return null;
    }
    
    var bars = new Array(95);
    for (i=0; i<95; i++) {
        bars[i] = 0;
    }
    

    bars[0] = 1;
    bars[1] = 0;
    bars[2] = 1;

    for (i=1; i<7; i++) {
       for (j=0; j<7; j++) {
          bars[(i-1)*7 + 3 + j] = left[parityTable[EAN13[0]][i-1]][EAN13[i]][j];
       }
    }

    bars[45] = 0;
    bars[46] = 1;
    bars[47] = 0;
    bars[48] = 1;
    bars[49] = 0;

     for (i=7; i<13; i++) {
         for (j=0; j<7; j++) {
             bars[(i-7)*7 + 50 + j] = right[EAN13[i]][j];
         }
    }

    bars[92] = 1;
    bars[93] = 0;
    bars[94] = 1;        
        
    return bars;
}

  
/**
 * calculates checksum of EAN13
 */
function checkSum(EAN13) {
var sum = 1 * EAN13[0] + 
          3 * EAN13[1] +
          1 * EAN13[2] +
          3 * EAN13[3] +
          1 * EAN13[4] +
          3 * EAN13[5] +
          1 * EAN13[6] +
          3 * EAN13[7] +
          1 * EAN13[8] +
          3 * EAN13[9] +
          1 * EAN13[10] +
          3 * EAN13[11];
        sum %= 10;
        sum = 10 - sum;
        sum %= 10;
        
    if (sum == EAN13[12]) {
      return true;
    }
    else {
      return false;
    }
}
  
  
//initialize data
function generate(EAN13)
{
  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(EAN13);
  if (bars != null)
  {
    for (i=0; i<bars.length; i++) {
      if ((i >= 0 && i<= 2) ||
          (i >= 45 && i<= 49) ||
          (i >= 92 && i<= 94)) {
        length = 100;
      } else {
        length = 90;
      }           
      if (bars[i] == 1) {
        ctx.fillRect(i*2+20, 10, 2, length);
      }
    }
    ctx.fillText(EAN13[0], 12, 100);
    for (i=1; i<7; i++) {
      ctx.fillText(EAN13[i], i*14+15, 105);
    }
    for (i=7; i<13; i++) {
      ctx.fillText(EAN13[i], i*14+25, 105);
    } 
  }
  else
  {
    ctx.fillText("Nieprawidłowy numer", 50, 80);
    ctx.fillText("Incorrect number", 50, 100);
  }
}
Dodaj komentarz