Си диез / Говнокод #27090 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 techlead_seneor_228, (Updated )

Комментарии (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]

    цыкли нинужны
    Ответить
      • Первый в смысле «перед ним больше никаких нет» или первый в смысле «с индексом 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.
        Ответить
    • в принципе это всё, что нужно знать о православных
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8