1. C# / Говнокод #27090

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    public class Checker
        {
            public bool CheckInn(long inn)
            {
                var values = inn.ToArray();
    
                switch (values.Length)
                {
                    case 10:
                        #region Юр. лица
                        var coefficientsN10 = new byte[] { 2, 4, 10, 3, 5, 9, 4, 6, 8 };
    
                        int sumN10 = GetSumNx(values, coefficientsN10);
    
                        var checkNumberN10 = (sumN10 % 11) % 10;
    
                        return values[^1] == checkNumberN10;
                    #endregion
    
                    case 12:
                        #region Физ. лица
                        var coefficientsN11 = new byte[] { 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
                        var coefficientsN12 = new byte[] { 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 };
    
                        var sumN11 = GetSumNx(values, coefficientsN11);
    
                        var checkNumberN11 = (sumN11 % 11) % 10;
    
                        var sumN12 = GetSumNx(values, coefficientsN12);
    
                        var checkNumberN12 = (sumN12 % 11) % 10;
    
                        return values[^2] == checkNumberN11 && values[^1] == checkNumberN12;
                    #endregion
    
                    default:
                        return false;
                }
            }
            private int GetSumNx(byte[] values, byte[] coefficientsNx)
            {
                var sumNx = 0;
    
                for (int i = 0; i < coefficientsNx.Length; i++)
                    sumNx += coefficientsNx[i] * values[i];
    
                return sumNx;
            }
        }
    
    
     public static class Extensions
        {
            public static byte[] ToArray(this long number)
            {
                var values = new Stack<byte>(12);
    
                while (number != 0)
                {
                    values.Push((byte)(number % 10));
                    number /= 10;
                }
                return values.ToArray();
            }
        }

    Проверка ИНН, ну и говно

    Запостил: techlead_seneor_228, 07 Ноября 2020

    Комментарии (20) RSS

    • Я тебя услышал. Теперь смотрим, как это делается на языке для белых:
      function is_valid_inn( $inn )
      {
          if ( preg_match('/\D/', $inn) ) return false;
          
          $inn = (string) $inn;
          $len = strlen($inn);
          
          if ( $len === 10 )
          {
              return $inn[9] === (string) (((
                  2*$inn[0] + 4*$inn[1] + 10*$inn[2] + 
                  3*$inn[3] + 5*$inn[4] +  9*$inn[5] + 
                  4*$inn[6] + 6*$inn[7] +  8*$inn[8]
              ) % 11) % 10);
          }
          elseif ( $len === 12 )
          {
              $num10 = (string) (((
                   7*$inn[0] + 2*$inn[1] + 4*$inn[2] +
                  10*$inn[3] + 3*$inn[4] + 5*$inn[5] + 
                   9*$inn[6] + 4*$inn[7] + 6*$inn[8] +
                   8*$inn[9]
              ) % 11) % 10);
              
              $num11 = (string) (((
                  3*$inn[0] +  7*$inn[1] + 2*$inn[2] +
                  4*$inn[3] + 10*$inn[4] + 3*$inn[5] +
                  5*$inn[6] +  9*$inn[7] + 4*$inn[8] +
                  6*$inn[9] +  8*$inn[10]
              ) % 11) % 10);
              
              return $inn[11] === $num11 && $inn[10] === $num10;
          }
          
          return false;
      }
      https://anton-pribora.ru/articles/php/php-javascript-inn/
      Ответить

    • 7*$inn[0] + 2*$inn[1] + 4*$inn[2] +
      10*$inn[3] + 3*$inn[4] + 5*$inn[5] +
      9*$inn[6] + 4*$inn[7] + 6*$inn[8] +
      8*$inn[9]

      цыкли нинужны
      Ответить
      • Зато смысл кода очевиднее. Я бы и не понял предназначение твоего говнища на си-диезе, если бы ты не пояснил его в описании.
        Ответить
    • а глде #region 095?
      Ответить
    • > return values[^1] == checkNumberN10;

      Что значит «[^1]» ?
      Ответить
      • 1й символ с конца
        Ответить
        • Первый в смысле «перед ним больше никаких нет» или первый в смысле «с индексом 1»?
          Ответить
          • https://stackoverflow.com/a/54092520
            т.е. если б такую хуйню добавили б в Си, и допустим
            char a[3] = {'h', 'u', 'i'};
            то
            a[^1] вернет 'i', a[^2] вернет 'u', a[^3] вернет 'h'.

            Короче, очередной сахарок для анскиллябр
            Ответить
            • В питоне просто минусы без особого синтаксиса для этого.
              Ответить
            • Ну причем минусы ма-те-ма-ти-чес-ки обоснованы: индекс берётся по модулю длины с округлением вниз.
              Ответить
              • Индексы с минусами в сишке намного более математически обоснованы
                int a[10] = {0,1,2,3,4,5,6,7,8,9};
                int *a_p = &a[5];
                printf("%d %d %d %d", a_p[0], a_p[-1], a_p[-2], a_p[-3]);

                выведет 5 4 3 2

                А в питоне питушня какая-то, зачем я там какие-то модули додумывать, и что оно с конца берется?

                И они еще при этом говорят "явное лучше неявного" ?
                Ответить
            • и в питое синтаксис нифига не логичный, и в шарпе теперь тоже
              Ответить
              • Python - иероглифы.
                C# - арабское письмо.
                PHP - лаконичная и понятная фраза с советского плаката, написанная шрифтом Impact.
                Ответить
    • https://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика#ИНН_и_религия


      > В некоторых религиозных общинах получение ИНН считается греховным и богопротивным. Архимандрит Закхей (Вуд) вспоминал: «Принимать или не принимать индивидуальный номер — одно время казалось, что важнее проблемы в православном сообществе нет»[6]. В то же время Элладская православная церковь в 1998 году и Русская православная церковь в 2001 году заявили о возможности использования ИНН для православных граждан. Тем не менее имеются другие богословские суждения. Ярким примером служит так называемое Обращение епископа Диомида, в котором осуждается благословение духовной властью персональной идентификации граждан.

      Почему б тогда от паспорта не отказаться? Там ведь тоже какой-то номер выбит.

      НА ТО МОЯ ВОЛЯ НА ТО ВОЛЯ РОДА НА ТО ВОЛЯ БГА БА ТВОРЦА ВСЕГО СУЩЕГО
      Ответить
      • В паспорте номер паспорта выбит. В ИНН - номер человека.
        Ответить
        • Не человека, а налогоплательщика.

          Доброе утро, bormand.
          Ответить
      • в принципе это всё, что нужно знать о православных
        Ответить

    Добавить комментарий