СНИЛС - проверка корректности

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
morkovin
Ветеран
Сообщения: 485
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

СНИЛС - проверка корректности

Сообщение morkovin » 01 Июль 2018, 9:52

Есть ли у кого-нибудь реализация на кларионе?
WBR, morkovin

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

СНИЛС - проверка корректности

Сообщение Admin » 01 Июль 2018, 12:10

Как обычно на коленке. Если устроит.

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

  program
  !
  ! на основе 
  ! https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE#%D0%A1%D1%82%D1%80%D0%B0%D1%85%D0%BE%D0%B2%D0%BE%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_%D0%B8%D0%BD%D0%B4%D0%B8%D0%B2%D0%B8%D0%B4%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BB%D0%B8%D1%86%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D1%87%D1%91%D1%82%D0%B0_(%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F)
  !
  map
    checksnils(string snils),byte
  end

  CODE           
  if CheckSnils(deformat('112-233-445 95',@P###-###-### ##P))
    message('snils ok')
  end
  
checksnils procedure(string snils)!,byte
c          byte
s          long  
n          byte
t          long
  code                      
  ! если не 11 - ошибка
  if len(clip(snils)) <> 11
    return false
  end
            
  ! контрольный номер можно проверить только после номера 1001998
  t = snils[1:9]
  if t <= 1001998
    return true
  end 
       
  ! суммируем    
  loop c = 1 to 9
    s += snils[c] * (10-c)
  end
    
  ! вычисляем контрольный номер 
  loop      
    if s < 100 
      n = s
      break
    elsif s=100 or s=101
      n = 0
      break
    else
      s = s % 101
      cycle
    end
  end  
    
  ! сверяем 
  if n = snils[10:11]
    return true
  end
    
  ! ничего не подошло - ошибка 
  return false
  
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
morkovin
Ветеран
Сообщения: 485
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

СНИЛС - проверка корректности

Сообщение morkovin » 01 Июль 2018, 16:21

Спасибо!!! Проверил - всё работает отлично!
WBR, morkovin

Ответить