AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.12.2002, 11:44   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Функция проверки контрольного числа ИНН
Недавно узнал, что ИНН это оказывается не просто уникальная последовательность цифр, но и последовательность сгенерированная по определенным правилам.
Идея не моя - взял здесь: http://www.delphikingdom.com/treasury/inn_pf.htm
Я всего лишь перевел код с Дельфи на X++.

Все это дело оформлено в виде функции. Функция вычисляет контрольное число ИНН и возвращает true если ИНН введен правильно или false в противном случае.
В качестве параметра передается проверяемый ИНН:


PHP код:
 boolean checkINN(str INN)
    {
      
int factor1[9];
      
int factor2[10];
      
int factor3[11];
      
int smsm2;
      
int i;

      
factor1[1] = 2;    factor1[2] = 4;    factor1[3] = 10;    factor1[4] = 3;     factor1[5] = 5;
      
factor1[6] = 9;    factor1[7] = 4;    factor1[8] = 6;     factor1[9] = 8;

      
factor2[1] = 7;    factor2[2] = 2;    factor2[3] = 4;     factor2[4] = 10;    factor2[5]  = 3;
      
factor2[6] = 5;    factor2[7] = 9;    factor2[8] = 4;     factor2[9] = 6;     factor2[10] = 8;

      
factor3[1]  = 3;    factor3[2] = 7;    factor3[3] = 2;     factor3[4] = 4;    factor3[5]  = 10;
      
factor3[6]  = 3;    factor3[7] = 5;    factor3[8] = 9;     factor3[9] = 4;    factor3[10] = 6;
      
factor3[11] = 8;


      if (
strlen(INN) == 10)
      {
        
sm 0;
        for (
i=1i<10i++)
          
sm sm str2int(substr(INN,i,1))*factor1[i];
        
sm sm mod 11;
        
sm sm mod 10;
        if (
str2int(substr(INN,10,1)) == sm) return true;
                                      else   return 
false;
      }
      else if (
strlen(INN) == 12)
      {
        
sm 0;
        for (
i=1i<11i++)
          
sm sm str2int(substr(INN,i,1))*factor2[i];
        
sm sm mod 11;
        
sm sm mod 10;

        
sm2 0;
        for (
i=1i<12i++)
          
sm2 sm2 str2int(substr(INN,i,1))*factor3[i];
        
sm2 sm2 mod 11;
        
sm2 sm2 mod 10;
        if ((
str2int(substr(INN,11,1)) == sm) && (str2int(substr(INN,12,1)) == sm2)) return true;
                      else return 
false;
      }
      else return 
false;
    } 
Кстати, неужели в Аксапте нет более удобного способа инициализировать массивы ?
Теги
алгоритм, инн

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
функция округления числа? MIkeFW DAX: Программирование 4 25.08.2011 12:07
Функция поиска подстроки, чувствительная к регистру . Есть ли такая в аксапте? ATimTim DAX: Программирование 4 13.02.2006 15:37
Неверный ИНН Леон DAX: Функционал 2 16.02.2005 11:16
функция Novice DAX: База знаний и проекты 1 15.08.2003 11:15
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:15.