Контрольная сумма ИНН
Добавлено: 14 Май 2019, 8:18
Подкиньте пожалуйста функцию у кого есть а то писать лень.
Спасибо.
Спасибо.
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Код: Выделить всё
MEMBER('fslibs6.clw') ! Это модуль типа MEMBER
TestINN FUNCTION (lop:str) ! Объявление процедуры
FilesOpened LONG
loc:InnR cstring(13)
loc:Gr12 GROUP,PRE()
loc:C0 BYTE(3)
loc:C1 BYTE(7)
loc:C2 BYTE(2)
loc:C3 BYTE(4)
loc:C4 BYTE(10)
loc:C5 BYTE(3)
loc:C6 BYTE(5)
loc:C7 BYTE(9)
loc:C8 BYTE(4)
loc:C9 BYTE(6)
loc:C10 BYTE(8)
END
loc:Const12 BYTE,DIM(11),OVER(loc:Gr12)
loc:s long
loc:i long
loc:zn byte
CODE ! Начало исполняемого кода
loc:zn=0
loc:InnR=clip(lop:Str)
case len(loc:InnR)
of 10 ! Резиденты и нерезиденты (без буквы F)
loc:S=0
loop loc:i=1 to 9
loc:S+=sub(lop:Str,loc:i,1)*loc:Const12[loc:i+2]
.
loop while loc:S=>11 ! модуль 11
loc:S-=11
.
if loc:S=10 ! модуль 10
loc:S=0
.
loc:zn=loc:s
return(loc:zn)
of 12
loc:S=0
loop loc:i=1 to 10
loc:s+=sub(lop:Str,loc:i,1)*loc:Const12[loc:i+1]
.
loop while loc:s=>11 ! модуль 11
loc:s-=11
.
if loc:s=10 ! модуль 10
loc:s=0
.
loc:InnR=sub(lop:str,1,10) & loc:s
loc:s=0
loop loc:i=1 to 11
loc:s+=sub(loc:InnR,loc:i,1)*loc:Const12[loc:i]
.
loop while loc:s=>11 ! модуль 11
loc:s-=11
.
if loc:s=10 ! модуль 10
loc:s=0
.
loc:InnR=sub(loc:InnR,1,11) & loc:s
loc:zn=sub(loc:InnR,11,2)
return(loc:zn)
.