With the method below you can verify a Turkish Tax Number
METHOD vergino_dogrula. DATA: v_vkno TYPE c LENGTH 10, vp TYPE p, toplam TYPE i, toplam_son TYPE i. FIELD-SYMBOLS: <fs_val> TYPE any, <fs_val2> TYPE any. " Vergi Kimlik sadece sayıdan oluşabilir IF NOT v_vkno CA '0123456789'. es_retmsg = VALUE #( retcode = 1 msg = 'Vergi Kimlik numarası sadece sayıdan oluşabilir.' ). " Vergi Kimlik no 10 karakter uzunluğunda olmalı. ELSEIF strlen( v_vkno ) NE 10. es_retmsg = VALUE #( retcode = 2 msg = 'Vergi Kimlik numarası 10 karakter uzunluğunda olmalı.' ). ENDIF. CHECK strlen( im_vergino ) EQ 10. v_vkno = im_vergino. DATA: BEGIN OF vkn, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n22, n33, n44, n55, n66, n77, n88, n99, n111, n222, n333, n444, n555, n666, n777, n888, n999, END OF vkn. " ilk 10 karakteri structurea yay WRITE v_vkno TO vkn. " MOD 10 DO 9 TIMES. ASSIGN COMPONENT |n{ sy-index }| OF STRUCTURE vkn TO <fs_val>. ASSIGN COMPONENT |n{ sy-index * 11 }| OF STRUCTURE vkn TO <fs_val2>. IF <fs_val> IS ASSIGNED AND <fs_val2> IS ASSIGNED. <fs_val2> = ( <fs_val> + ( 10 - sy-index ) ) MOD 10. ENDIF. UNASSIGN: <fs_val>, <fs_val2>. ENDDO. " üst alma DO 9 TIMES. ASSIGN COMPONENT |n{ sy-index * 11 }| OF STRUCTURE vkn TO <fs_val>. ASSIGN COMPONENT |n{ sy-index * 111 }| OF STRUCTURE vkn TO <fs_val2>. IF <fs_val> IS ASSIGNED AND <fs_val2> IS ASSIGNED. CLEAR: vp. <fs_val2> = vp = ( <fs_val> * ( 2 ** ( 10 - sy-index ) ) ) MOD 9. ENDIF. IF <fs_val> NE 0 AND <fs_val2> EQ 0. <fs_val2> = 9. ENDIF. toplam = toplam + <fs_val2>. UNASSIGN: <fs_val>, <fs_val2>. ENDDO. IF toplam MOD 10 EQ 0. toplam_son = 0. ELSE. toplam_son = 10 - ( toplam MOD 10 ). ENDIF. " toplamın son rakamı vkn son rakamına uyması lazım IF toplam_son EQ vkn-n10. es_retmsg = VALUE #( retcode = 0 msg = 'Vergi Kimlik numarası doğru.' ). ELSE. es_retmsg = VALUE #( retcode = 4 msg = 'Vergi Kimlik numarası geçersiz.' ). ENDIF. ENDMETHOD.