Controle checksum barcodes

Patrick_Leunissen
Patrick_Leunissen Member Posts: 5
edited 2008-02-04 in NAV Dutch speaking only
Hallo,

Ik wil graag de ean codes die bij producten worden ingevoerd in navision 4.0 na invoer laten checken op juistheid door middel van de checksum. Natuurlijk is het beste bij aanmaken van artikelen dit te scannen vanaf het artikel, maar dat is niet altijd op dat moment beschikbaar.

De juistheid is binnen navision weliswaar niet direct van belang, maar wel in ons gekoppelde transactiesysteem.

Kan iemand daarmee helpen?

Patrick Leunissen

Comments

  • amitagupta
    amitagupta Member Posts: 43
    Which language is that?? :(
  • Luc_VanDyck
    Luc_VanDyck Member, Moderator, Administrator Posts: 3,633
    It's posted in the "Navision Dutch speaking only" forum. So take a guess.
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • fverkel
    fverkel Member Posts: 66
    Ik heb onderstaande functie EAN13 gemaakt in tabel 27 Item.
    De meegegeven barcode wordt aangevuld met de Check Digit,
    of als er al een Check Digit inzit, wordt deze gecontroleerd.



    { EAN13(pEANCode : Text[13]) : Text[13] }
    // Deze functie berekent de Check Digit voor EAN13-artikelnummers en maakt een string voor lettertype EAN13.

    IF pEANCode = '' THEN
    EXIT;

    EANTxt := COPYSTR(pEANCode, 1, 12); // Laatste positie verwijderen

    IF STRLEN(EANTxt) <> 12 THEN
    ERROR('Ongeldige lengte EAN-code. EAN-code %1 is %2 lang.', pEANCode, STRLEN(pEANCode));

    FOR i := 1 TO STRLEN(EANTxt) DO
    IF CharToInt(EANTxt) = -1 THEN
    ERROR('Ongeldig teken (%1) in EAN-code %2.', EANTxt, pEANCode);

    checksum := 0;
    FOR i := 2 TO 12 DO BEGIN
    checksum := checksum + (CharToInt(EANTxt));
    i := i + 1;
    END;

    checksum := checksum * 3;
    FOR i := 1 TO 11 DO BEGIN
    checksum := checksum + (CharToInt(EANTxt));
    i := i + 1;
    END;

    EANTxt := EANTxt + FORMAT((10 - checksum MOD 10) MOD 10);
    IF (STRLEN(pEANCode) = 13) AND (EANTxt <> pEANCode) THEN
    MESSAGE('Andere Check Digit.\\Meegegeven Check Digit EAN-code: %1.\Berekende Check Digit EAN-code: %2.',
    pEANCode[13], EANTxt[13]);

    EXIT(EANTxt);
    Keep It Simple and Stupid (KISS), but never oversimplify.
  • fverkel
    fverkel Member Posts: 66
    O, onderstaand stukje kan je weglaten.
    Is een extra controle, dat er alleen cijfers in de EAN-code zitten.



    FOR i := 1 TO STRLEN(EANTxt) DO
    IF CharToInt(EANTxt) = -1 THEN
    ERROR('Ongeldig teken (%1) in EAN-code %2.', EANTxt, pEANCode);
    Keep It Simple and Stupid (KISS), but never oversimplify.
  • kriki
    kriki Member, Moderator Posts: 9,121
    Beter laat dan nooit : kijk in de online help : STRCHECKSUM
    Regards,Alain Krikilion
    No PM,please use the forum. || May the <SOLVED>-attribute be in your title!


  • bolko
    bolko Member Posts: 13
    Could some one translate this Code in English?

    Bolko de pawlikowski
  • bolko
    bolko Member Posts: 13
    hI,
    (CharToInt(EANTxt))
    in english WHAT FUNTION IS ChartoInt?

    Thanks,





    fverkel wrote:
    Ik heb onderstaande functie EAN13 gemaakt in tabel 27 Item.
    De meegegeven barcode wordt aangevuld met de Check Digit,
    of als er al een Check Digit inzit, wordt deze gecontroleerd.



    { EAN13(pEANCode : Text[13]) : Text[13] }
    // Deze functie berekent de Check Digit voor EAN13-artikelnummers en maakt een string voor lettertype EAN13.

    IF pEANCode = '' THEN
    EXIT;

    EANTxt := COPYSTR(pEANCode, 1, 12); // Laatste positie verwijderen

    IF STRLEN(EANTxt) <> 12 THEN
    ERROR('Ongeldige lengte EAN-code. EAN-code %1 is %2 lang.', pEANCode, STRLEN(pEANCode));

    FOR i := 1 TO STRLEN(EANTxt) DO
    IF CharToInt(EANTxt) = -1 THEN
    ERROR('Ongeldig teken (%1) in EAN-code %2.', EANTxt, pEANCode);

    checksum := 0;
    FOR i := 2 TO 12 DO BEGIN
    checksum := checksum + (CharToInt(EANTxt));
    i := i + 1;
    END;

    checksum := checksum * 3;
    FOR i := 1 TO 11 DO BEGIN
    checksum := checksum + (CharToInt(EANTxt));
    i := i + 1;
    END;

    EANTxt := EANTxt + FORMAT((10 - checksum MOD 10) MOD 10);
    IF (STRLEN(pEANCode) = 13) AND (EANTxt <> pEANCode) THEN
    MESSAGE('Andere Check Digit.\\Meegegeven Check Digit EAN-code: %1.\Berekende Check Digit EAN-code: %2.',
    pEANCode[13], EANTxt[13]);

    EXIT(EANTxt);