-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen_inn
30 lines (29 loc) · 1.05 KB
/
gen_inn
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
CREATE OR REPLACE FUNCTION public.gen_inn(integer DEFAULT 2)
RETURNS character varying AS
$BODY$select
string_agg(n::character,'')
|| mod(mod(sum(n*k1), 11),10)
|| case when t=0 then (mod(mod(sum(n*k2) + (mod(mod(sum(n*k1), 11),10) * 8), 11),10))::character else '' end
from (
select
case
when lead(p,1+t) over () is null
then null
else floor((random()*10))::int
end n
,p::int + 1 k2
,(lead(p,1+t) over ())::int + 1 k1
,t
from regexp_split_to_table('26139248357',E'\\s*') p,
(select coalesce(nullif($1,2),(floor(random()*2))::int) t) t
) q1
group by t$BODY$
LANGUAGE sql VOLATILE
COST 100;
ALTER FUNCTION public.gen_inn(integer)
OWNER TO postgres;
COMMENT ON FUNCTION public.gen_inn(integer) IS 'Генерирует случайное тестовое значение ИНН 10 или 12 знаков
Параметр:
0 - возвращет ИНН 12 знаков
1 - возвращает ИНН 10 знаков
2, без параметра или null - возвращает ИНН 10 или 12 знаков случайным образом';