-
Notifications
You must be signed in to change notification settings - Fork 144
/
is_kpp.sql
43 lines (38 loc) · 1.7 KB
/
is_kpp.sql
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
36
37
38
39
40
41
42
43
create or replace function public.is_kpp(str text)
returns boolean
immutable
returns null on null input
parallel safe
language sql
set search_path = ''
cost 5
as
$$
select
octet_length(str) = 9
and regexp_match(
str,
--https://www.banki.ru/wikibank/kod_prichinyi_postanovki_na_uchet/
--https://rg.ru/documents/2012/08/22/nalog-inn-dok.html
$regexp$
^
[0-9]{4} #NNNN – код налогового органа, где была поставлена на учет организация
[0-9A-Z]{2} #PP – причина постановки на учет (эти символы могут принимать значения для российских организаций – от 1 до 50, для иностранных – от 51 до 99)
[0-9]{3} #XXX – порядковый номер постановки на учет в территориальном налоговом органе (цифры показывают, сколько раз организация вставала на учет по данной причине)
$
$regexp$, 'x') is not null
and str !~ '^([1-9])\1+$'
$$;
comment on function public.is_kpp(text) is 'Проверяет, что переданная строка является КПП (код причины постановки на учёт)';
--TEST
DO $$
BEGIN
--positive
assert public.is_kpp('000000000');
assert public.is_kpp('123456789');
assert public.is_kpp('0000AZ000');
--negative
assert not public.is_kpp('12345');
assert not public.is_kpp('1234567890');
assert not public.is_kpp('111111111');
END $$;