In serialization projects we sometimes deploy the GTIN (Global Trade Item Number) standard as set out by the GS1 organization. This number is used by an organization to uniquely identify a trade item or product / service. an sGTIN (serialized GTIN) is a unique identifier for an INSTANCE of a particular product identified by the GTIN number.
There are four GTIN formats. GTIN-8 (length 8), GTIN-12, GTIN-13, GTIN-14.
For applications that require a uniform 14-digit format, leading zeroes need to be added:
GTIN-8: 000000nnnnnnnn
GTIN-12: 00nnnnnnnnnnnn
GTIN-13: 0nnnnnnnnnnnnn
GTIN-14: nnnnnnnnnnnnnn <<< No need to change since it's already 14 in length
The check-digit always makes up the last character of the barcode number and is used to verify whether the barcode number is valid or not (on reading).
Here is a function module that can be used to create this check-digit. Note: You can also adjust it to check a check-digit is valid too...
Z_FM_EM_CALCULATE_BC_CHECK_DIG
Take the Barcode number in as input
The export structure will have the check digit and the GTIN number
Exceptions are captured for invalid barcode formats
The Function Module code would look something like this...
FUNCTION z_fm_em_calculate_bc_check_dig.
CONSTANTS: lc_numeric TYPE string VALUE '0123456789'.
DATA: lv_len TYPE i,
lv_pos1 TYPE i,
lv_pos2 TYPE i,
lv_pos3 TYPE i,
lv_pos4 TYPE i,
lv_pos5 TYPE i,
lv_pos6 TYPE i,
lv_pos7 TYPE i,
lv_pos8 TYPE i,
lv_pos9 TYPE i,
lv_pos10 TYPE i,
lv_pos11 TYPE i,
lv_step1 TYPE i,
lv_step2 TYPE i,
lv_step3 TYPE i,
lv_step4 TYPE i,
lv_step5 TYPE i,
lv_cd(1) TYPE c.
ev_return = 0.
IF iv_bc CO '0123456789'.
lv_len = strlen( iv_bc ).
CASE lv_len.
WHEN 11. "GTIN-12
lv_pos1 = iv_bc(1).
lv_pos2 = iv_bc+1(1).
lv_pos3 = iv_bc+2(1).
lv_pos4 = iv_bc+3(1).
lv_pos5 = iv_bc+4(1).
lv_pos6 = iv_bc+5(1).
lv_pos7 = iv_bc+6(1).
lv_pos8 = iv_bc+7(1).
lv_pos9 = iv_bc+8(1).
lv_pos10 = iv_bc+9(1).
lv_pos11 = iv_bc+10(1).
lv_step1 = lv_pos1 + lv_pos3 + lv_pos5 + lv_pos7 + lv_pos9 + lv_pos11.
lv_step2 = lv_step1 * 3.
lv_step3 = lv_pos2 + lv_pos4 + lv_pos6 + lv_pos8 + lv_pos10.
lv_step4 = lv_step2 + lv_step3.
lv_step5 = 10 * ( ( lv_step4 DIV 10 ) + 1 ).
ev_check_digit = lv_step5 - lv_step4. "Set the Check Digit
lv_cd = ev_check_digit.
CONCATENATE iv_bc lv_cd INTO ev_gtin. "Set the GTIN
WHEN OTHERS.
"Issue error ev_return
ev_return = 4.
RAISE unsupported_length.
ENDCASE.
ELSE. "Non-numeric barcode
ev_return = 8.
RAISE non_numeric.
ENDIF.
ENDFUNCTION.
Comments