Avatar billede stigaard Nybegynder
16. august 2005 - 17:08 Der er 12 kommentarer og
1 løsning

Validering af EAN13

Er der nogen der har en ASP funktion der kan validere om en EAN13 kode - indtastet i en bestillingsformular - er korrekt?
Avatar billede ttopholm Nybegynder
18. august 2005 - 02:26 #1
Jeg mener ikke man kan validere en ean12, da det bare er en streng af forskellige tal med ingen sammenhæng.

Vil du teste den op mod noget.. en db eller hvad.
Avatar billede stigaard Nybegynder
18. august 2005 - 08:51 #2
EAN-13 består af 13 cifre, hvoraf det sidste er et kontrol cifer der beregnes efter Modulo 10 metoden.
Jeg har fundet denne beskrivelse:
http://www.makebarcode.com/specs/ean_13.html
Kan jeg evt. få Visual Basic function ind i min ASP kode, til at validere EAN-koden?
Avatar billede ttopholm Nybegynder
18. august 2005 - 11:06 #3
Jamen der står jo hvordan det skal beregnes...

Så er det vil bare at følge den ;-)
Avatar billede kemoiq Nybegynder
18. august 2005 - 15:22 #4
Hej

Her er en funktion der tjekker kontrol cifferet, den returnere true eller false.


Function ean13(ean)
  dim sum1, sum2, sum3

  for i = 1 To Len(ean)-1
    if (i mod 2 = 0) Then
      sum1 = sum1 + CInt(Mid(ean, i, 1))
    else
      sum2 = sum2 + CInt(Mid(ean, i, 1))
    end if
  next

  sum3 = (sum1*3 + sum2) mod 10

  if (sum3 = 10) Then
    sum3 = 0
  end if

  if (sum3 = CInt(Mid(ean, 13, 1))) then
    ean13 = true
  else
    ean13 = false
  end if
End Function
Avatar billede stigaard Nybegynder
19. august 2005 - 11:40 #5
Hmm, jeg får "False" på et rigtigt EAN nummer. Det må være denne fremgangsmåde der skal benyttes: http://www.ean.dk/EAN_Sys/helpdesk/faq/kntrlcif.htm#EAN-13
Den skal returnere "true" på f.eks. "5712345000014".
kemoig, kan du kode omskrives så den fungere med disse retningslinier?


Kontrolcifferet udregnes på baggrund af de 12 foregående karakterer.
A:
Hvert enkelt ciffer i EAN-13 varenummeret skal multipliceres med henholdsvis 1 eller 3. Start altid bagfra med 3, 1, 3, 1… o.s.v..

B:
Resultaterne af multiplikationen skrives lige under x1, x3, x1 o.s.v. .Resultaterne adderes til et samlet resultat.

C :
Det samlede resultat fra B rundes op til nærmeste hele tiere.

D :
Resultatet fra B subtraheres resultatet fra C. Dette giver kontrolcifferet K.

Eksempel:
EAN-13 varenummer 5 7 1 2 3 4 5 0 0 0 0 1 
(A) x1 x3 x1 x3 x1 x3 x1 x3 x1 x3 x1 x3 
(B) +5 +21 +1 +6 +3 +12 +5 +0 +0 +0 +0 +3 =56

(C) 56 (K) rundes op til nærmeste hele tiere  60

(D) Kontrolciffer 60 - 56 = 4
Avatar billede kemoiq Nybegynder
19. august 2005 - 20:58 #6
Hej

Har ikke haft tid før nu til at kigge på spørgsmålet, men hvis du ikke har fundet en løsning, så kommer den i hvert fald her.


Function ean13(ean)
  dim sum1, sum2

  for i = 1 To Len(ean)-1
    if (i mod 2 = 0) Then
      sum1 = sum1 + CInt(Mid(ean, i, 1)) * 3
    else
      sum1 = sum1 + CInt(Mid(ean, i, 1))
    end if
  next

  sum2 = CInt(Mid(sum1, 1, 1)) + 1
  sum2 = sum2 * 10
  sum2 = sum2 - sum1

  if (sum2 = 10) Then
    sum2 = 0
  end if

  if (sum2 = CInt(Mid(ean, 13, 1))) then
    ean13 = true
  else
    ean13 = false
  end if
End Function
Avatar billede stigaard Nybegynder
20. august 2005 - 21:12 #7
Super! Lige som det skal være. :-)
Er det svært at få den til at tjekke om der nu også er 13 cifre i input?
Avatar billede kemoiq Nybegynder
20. august 2005 - 21:41 #8
nej

Function ean13(ean)
  if (Len(ean) = 13) then
    dim sum1, sum2

    for i = 1 To Len(ean)-1
      if (i mod 2 = 0) Then
        sum1 = sum1 + CInt(Mid(ean, i, 1)) * 3
      else
        sum1 = sum1 + CInt(Mid(ean, i, 1))
      end if
    next

    sum2 = CInt(Mid(sum1, 1, 1)) + 1
    sum2 = sum2 * 10
    sum2 = sum2 - sum1

    if (sum2 = 10) Then
      sum2 = 0
    end if

    if (sum2 = CInt(Mid(ean, 13, 1))) then
      ean13 = true
    else
      ean13 = false
    end if
  else
    ean13 = false
  end if
End Function
Avatar billede alvion Nybegynder
24. november 2005 - 14:38 #9
Hej kemoiq

Jeg har prøvet at bruge ovenstående til at kontrollere de EAN numre, som offentlige kontorer anvender ved elektronisk fakturering, men der virker den ikke. Jeg har f.eks. følgende (gyldige) nummer:

5798002472769

Hvad kan der være galt? Er det en helt anden validering, som skal til?
Avatar billede stigaard Nybegynder
24. november 2005 - 15:43 #10
Hej Alvion
Kan du bruge denne her: http://www.stigaard.dk/ean2/

function ccc13(form) {
  factor = 3;
  sum = 0;
  if (form.numero.value.length!=12){
    alert("The ID Number you entered contains only " + form.numero.value.length + " digit(s). " +
          "\nThe EAN/UCC-13 ID Number requires that you enter 12 digits." +
          "\n\nPlease check your number and try again." +
          "\n\nIf you require more assitance, please contact Customer" +
          "\nService at 937-435-3870.");
    form.cc.value = ""
  } else {
   
    for (index = form.numero.value.length; index > 0; --index) {
        sum = sum + form.numero.value.substring (index-1, index) * factor;
        factor = 4 - factor;
      }
      leadingdigit(form);
      cc = ((1000 - sum) % 10);
      form.cc.value = cc;
  }
}


function leadingdigit(form) {
  if (form.numero.value.substring(0,1) == 0) {
      alert("By selecting 0 zero as your first digit, you are indicating" +
          "\nthe use of a UCC assigned Company Prefix and Identifying a" +
          "\nGlobal Location Number (GLN)");
  }
  if (form.numero.value.substring(0,1) > 0 ) {
      alert("By selecting 1-9 as your first digit, you are" +
          "\nindicating the use of an EAN assigned Company" +
          "\nPrefix and are identifying GTINs or GLNs");
  }
}
Avatar billede kemoiq Nybegynder
24. november 2005 - 21:50 #11
Hej

Er først lige kommet hjem, men hvis ikke stigaard kommentar kunne hjælpe så skulle det her løse problemet.


<%
Function ean13(ean13Number)
  if (Len(ean13Number) = 13) then
    dim checkValue
        checkValue = 0

    for i = 1 To 12
      if (i mod 2 = 0) Then
        checkValue = checkValue + CInt(Mid(ean13Number, i, 1)) * 3
      else
        checkValue = checkValue + CInt(Mid(ean13Number, i, 1))
      end if
    next

    checkValue = checkValue Mod 10
    checkValue = 10 - checkValue

    if (checkValue = 10) Then
      checkValue = 0
    end if

    if (checkValue = CInt(Mid(ean13Number, 13, 1))) then
      ean13 = true
    else
      ean13 = false
    end if
  else
    ean13 = false
  end if
End Function
%>
<%= ean13("5712345000014") %>
Avatar billede kemoiq Nybegynder
24. november 2005 - 21:52 #12
Sorry, havde ikke lige styr på hvem der stillede spørgsmålet.
Avatar billede alvion Nybegynder
01. december 2005 - 14:36 #13
kemioq => Den er jo perfekt! Hvor har du specifikationen fra?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester