Controle checksum barcodes

Patrick_LeunissenPatrick_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

  • amitaguptaamitagupta Member Posts: 43
    Which language is that?? :(
  • Luc_VanDyckLuc_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)
  • fverkelfverkel 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.
  • fverkelfverkel 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.
  • krikikriki Member, Moderator Posts: 9,112
    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!


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

    Bolko de pawlikowski
  • bolkobolko 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);
Sign In or Register to comment.