Контрольная сумма ИНН

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Admin
Администратор
Сообщения: 3381
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Контрольная сумма ИНН

Сообщение Admin » 14 Май 2019, 8:18

Подкиньте пожалуйста функцию у кого есть а то писать лень.
Спасибо.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1182
Зарегистрирован: 06 Ноябрь 2014, 12:48

Контрольная сумма ИНН

Сообщение finsoftrz » 14 Май 2019, 10:05

Код: Выделить всё

                     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)
   .

Рязань решает.

Аватара пользователя
Admin
Администратор
Сообщения: 3381
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Контрольная сумма ИНН

Сообщение Admin » 14 Май 2019, 10:06

Спасибо
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Ответить