2019

Jun

17

Av Rolf

För några år sedan, 12 år för att vara exakt, visade jag hur du beräknar kontrollsiffran för ett personnummer och kontrollerar om det är korrekt. Formeln för att beräkna kontrollsiffran för ett EAN-nummer, som kan vara en streckkod du t.ex. scannar in med din iOS-enhet, är snarlik. Siffrorna i numret multipliceras och summeras enligt ett givet mönster.

Det finns förstås flera webbsajter och program för att beräkna kontrollsiffran i EAN-nummer, men det går självklart också att göra med FileMaker. På flera sätt dessutom.

Ett EAN-nummer består oftast av 13 tecken, s.k. EAN-13 eller GTIN-13 som det numera heter. Det är 12 siffror som följs av en kontrollsiffra som beräknas fram med hjälp av de 12 siffrorna. Formeln är att multiplicera siffran i varannan position i numret med 3, siffran i varannan position med 1 och sedan lägga ihop värdena. Resten vid division med 10 dras från 10 och blir kontrollsiffran. Om t.ex. summan blir 134, blir resten vid division med 10 värdet 4 vilket gör att kontrollsiffran blir 6 (=10-4).

Om jag följer samma mönster som vid kontroll av personnummer blir formeln så här:

10 - Mod(
Middle ( ean ; 1 ; 1 ) + 
Middle ( ean ; 2 ; 1 ) * 3 +
Middle ( ean ; 3 ; 1 ) + 
Middle ( ean ; 4 ; 1 ) * 3 +
Middle ( ean ; 5 ; 1 ) + 
Middle ( ean ; 6 ; 1 ) * 3 +
Middle ( ean ; 7 ; 1 ) + 
Middle ( ean ; 8 ; 1 ) * 3 +
Middle ( ean ; 9 ; 1 ) + 
Middle ( ean ; 10 ; 1 ) * 3 +
Middle ( ean ; 11 ; 1 ) + 
Middle ( ean ; 12 ; 1 ) * 3; 10)

Fältet som innehåller EAN-numrets 12 första siffror heter ”ean” i FileMaker-databasen jag använt. Det bör finnas någon kontroll på att fältet verkligen innehåller 12 tecken och att de är siffror, jag har utelämnat det i formeln.

Från FileMaker 18 finns funktionen While. Den fungerar utmärkt vid beräknar av den här typen, dvs. när varje siffra från position 1 till 12 ska behandlas. Med While blir beräkningen så här:

10 - Mod(
While ( 
  [ i = 0; sum = 0] ; 
    i < 12; 
  [ i = i + 1; sum = sum + Middle (ean; i; 1)*If(Mod(i;2) = 0; 3; 1)] ; 
  sum
); 10)

Som första argument tilldelas de båda variablerna i och sum värdet 0. Dessa variabler kan endast användas inom funktionen While, jämför med variablerna i funktionen Let.

Loopen ska göras så länge variabeln i är mindre än 12, det andra argumentet i funktionen anger det. Loopen görs alltså 12 gånger, dvs. lika många gånger som det finns siffror i EAN-numret.

Som tredje argument utförs beräkningar för varje loop, i det här fallet ökas variabeln i med 1 och variabeln sum ökas med värdet av siffran i positionen i, som fås av funktionen Middle. Är variabeln i ett jämnt tal ska siffran dessutom multipliceras med 3. För att kontrollera om det är jämnt använder jag formeln Mod(i;2) som ger värdet 0 om i är jämnt annars 1.

Vilken av formlerna du använder är en fråga om tycke och smak, de ger båda samma resultat. Om det är så få loopar som 12 så väljer jag för tydlighetens skull den första varianten, men är det fler loopar är formeln med While helt klart bättre.

Ett exempel på en 12-siffrig EAN-kod är 978914400253. Skriver du in koden i fältet ”ean” får du kontrollsiffran 8. Just denna EAN-kod kommer från en välbekant (hoppas jag om du läser detta!) bok.

När du har räknat fram kontrollsiffran kan du skriva ut streckkoden, använd t.ex. vår web-tjänst.

Skriv en kommentar

Din epost-adress stannar hos oss.