powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / regexp_like и ИНН
13 сообщений из 13, страница 1 из 1
regexp_like и ИНН
    #40066680
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Есть выражение

REGEXP_LIKE(txt, '[0-9]{10,12}')

как бы её переписать, чтобы всякие '1234567890ТЕСТ' не пролазили? нужно ровно 10 или ровно 12 цифр.
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066682
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
^[0-9]{10,12}$
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066684
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256,
спасибо!
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066688
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
^[0-9]{10,12}$
Нужно ровно 10 или ровно 12. А 11 не нужно.
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066698
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, не обратил внимания на эту хотелку автора.

^([0-9]{10}|[0-9]{12})$
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066702
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
Да, не обратил внимания на эту хотелку автора.

^([0-9]{10}|[0-9]{12})$

^([0-9]{10}([0-9]{2})?)$
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066715
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше функцию проверки написать с высчитыванием контрольного числа. То что строка содержит 10 или 12 цифр ещё не означает что это ИНН
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066733
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте меряться, чей регэксп короче.
Код: plsql
1.
'^\d{10}(\d\d)?$'
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066745
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алымов Анатолий
Лучше функцию проверки написать с высчитыванием контрольного числа. То что строка содержит 10 или 12 цифр ещё не означает что это ИНН

Даже если контрольное число совпадет это тоже не означает что это ИНН
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066746
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алымов Анатолий
Лучше функцию проверки написать с высчитыванием контрольного числа. То что строка содержит 10 или 12 цифр ещё не означает что это ИНН

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
declare
  procedure assert_inn(i_inn varchar2) is
    la_coeff_10 sys.odcinumberlist  := sys.odcinumberlist(2,4,10,3,5,9,4,6,8,0);
    la_coeff_121 sys.odcinumberlist := sys.odcinumberlist(7,2,4,10,3,5,9,4,6,8,0);
    la_coeff_122 sys.odcinumberlist := sys.odcinumberlist(3,7,2,4,10,3,5,9,4,6,8,0);
    procedure assert_cs(i_inn varchar2, io_coeff in out nocopy sys.odcinumberlist) is
      l_calc number := 0;
    begin
      for i in 1..io_coeff.count loop
        l_calc := l_calc + io_coeff(i)*to_number(substr(i_inn,i,1),'0');
      end loop;
      case to_char(mod(mod(l_calc,11),10),'fm0') 
        when substr(i_inn,io_coeff.count,1) then null;
        else raise_application_error(-20000,'ИНН не валиден: "'||i_inn||'"');
      end case;       
    end;
  begin
    case length(i_inn)
      when 10 then
        assert_cs(i_inn,la_coeff_10);
      when 12 then
        assert_cs(i_inn,la_coeff_121);
        assert_cs(i_inn,la_coeff_122);
    else
      raise VALUE_ERROR;
    end case;
  exception
    when VALUE_ERROR then
      raise_application_error(-20000,'ИНН должен состоять из 10 либо 12 цифр, получено "'||i_inn||'"');
  end;
begin
  assert_inn('7830002293');
  assert_inn('500100732259');
end;
/
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066764
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AmKad
Давайте меряться, чей регэксп короче.
Код: plsql
1.
'^\d{10}(\d\d)?$'

давай
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with v(s) as (
select '012345678' from dual union all
select '0123456789' from dual union all
select '01234567890' from dual union all
select '012345678901' from dual union all
select '0123456789012' from dual 
)
select
  case when regexp_like(s, '^\d{10}(\d\d)?$') then 'y' else 'n' end amkad
 ,case when regexp_like(s, '^(\d{2}){5,6}$') then 'y' else 'n' end mine
from v
/
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066771
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov
давай
Уделал.
...
Рейтинг: 0 / 0
regexp_like и ИНН
    #40066783
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AmKad
Sayan Malakshinov
давай
Уделал.
и даже группа тут не нужна:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with v(s) as (
select '012345678' from dual union all
select '0123456789' from dual union all
select '01234567890' from dual union all
select '012345678901' from dual union all
select '0123456789012' from dual 
)
select
  case when regexp_like(s, '^\d{10}(\d\d)?$') then 'y' else 'n' end amkad
 ,case when regexp_like(s, '^(\d{2}){5,6}$') then 'y' else 'n' end mine
 ,case when regexp_like(s, '^\d{2}{5,6}$') then 'y' else 'n' end mine2
from v
/
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / regexp_like и ИНН
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]