Skip to content

Commit ea322c0

Browse files
committed
Adicionado geradores de cnpj e cnpj alfanumerico
1 parent 46a46f9 commit ea322c0

File tree

2 files changed

+205
-0
lines changed

2 files changed

+205
-0
lines changed

Misc/vw.GerarCNPJ-Alfa.sql

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
(adaptado de Fausto F. Branco em http://dba-sqlserver.blogspot.com.br/2009/11/gerar-cpf-valido.html)
6+
7+
# Descricao
8+
View para gerars CNPJ alfanumérico
9+
Você pode fazer um cross apply com e gerar um cnpj por linha.
10+
Usado estes documentados como fonte do cálculo e validação: https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/publicacoes/documentos-tecnicos/cnpj
11+
*/
12+
13+
USE master
14+
GO
15+
16+
IF OBJECT_ID('dbo.vwGeraCNPJAlfa','V') IS NULL
17+
EXEC('CREATE VIEW dbo.vwGeraCNPJAlfa as select 1 StubVersion')
18+
GO
19+
20+
ALTER VIEW dbo.vwGeraCNPJAlfa
21+
AS
22+
23+
24+
25+
26+
SELECT
27+
cnpj =char(48+n1)+
28+
char(48+n2)+
29+
char(48+n3)+
30+
char(48+n4)+
31+
char(48+n5)+
32+
char(48+n6)+
33+
char(48+n7)+
34+
char(48+n8)+
35+
char(48+n9)+
36+
char(48+n10)+
37+
char(48+n11)+
38+
char(48+n12)+
39+
convert(char(1),d1)+
40+
convert(char(1),d2)
41+
,*
42+
FROM
43+
(
44+
SELECT
45+
C2BASE.*
46+
,d2 = CASE
47+
WHEN d2calc%11 < 2 THEN 0
48+
ELSE 11-d2calc%11
49+
END
50+
51+
FROM (
52+
SELECT
53+
C1.*
54+
,d2calc = n1*6 + n2*5 + n3*4 + n4*3 + n5*2 + n6*9 + n7*8 + n8*7 + n9*6 + n10*5 + n11*4 + + n12*3 + d1*2
55+
FROM
56+
(
57+
58+
SELECT
59+
CASE
60+
WHEN d1calc%11 < 2 THEN 0
61+
ELSE 11-d1calc%11
62+
END as d1
63+
,C1BASE.*
64+
FROM
65+
(
66+
SELECT
67+
*
68+
,d1calc = n1*5 + n2*4 + n3*3 + n4*2 + n5*9 + n6*8 + n7*7 + n8*6 + n9*5 + n10*4 + n11*3 + + n12*2
69+
FROM
70+
(
71+
SELECT -- Como não podemos usar os numeros 10 a 16, então, fazemos um if.
72+
n1 = case when n1 between 10 and 16 then n1+7 else n1 end
73+
,n2 = case when n2 between 10 and 16 then n2+7 else n2 end
74+
,n3 = case when n3 between 10 and 16 then n3+7 else n3 end
75+
,n4 = case when n4 between 10 and 16 then n4+7 else n4 end
76+
,n5 = case when n5 between 10 and 16 then n5+7 else n5 end
77+
,n6 = case when n6 between 10 and 16 then n6+7 else n6 end
78+
,n7 = case when n7 between 10 and 16 then n7+7 else n7 end
79+
,n8 = case when n8 between 10 and 16 then n8+7 else n8 end
80+
,n9 = case when n9 between 10 and 16 then n9+7 else n9 end
81+
,n10
82+
,n11
83+
,n12
84+
FROM (
85+
SELECT
86+
convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n1
87+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n2
88+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n3
89+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n4
90+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n5
91+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n6
92+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n7
93+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%43 as n8
94+
,convert(int,0) as n9
95+
,convert(int,0) as n10
96+
,convert(int,0) as n11
97+
,convert(int,1) as n12
98+
) S
99+
) R
100+
) C1BASE
101+
) C1
102+
) C2BASE
103+
) C2
104+
105+

Misc/vw.GerarCNPJ.sql

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
(adaptado de Fausto F. Branco em http://dba-sqlserver.blogspot.com.br/2009/11/gerar-cpf-valido.html)
6+
7+
# Descricao
8+
View para gerars CPFs.
9+
Você pode fazer um cross apply com e gerar um cpf por linha.
10+
O script original usava estrutruas de loops, o que deixava difícil para adaptar em comandos SELECT ou lento (se usado como uma table function).
11+
Portando para uma view, você pode facilmente usar em diversos lugares e manter o máximo de performance.
12+
13+
Exemplo:
14+
15+
select
16+
*
17+
from
18+
FakeUsers
19+
CROSS JOIN
20+
vwGeraCPF
21+
22+
Esse comando acima vai gerar um cpf para cada linha da tabela FakeUsers.
23+
*/
24+
25+
USE master
26+
GO
27+
28+
--IF OBJECT_ID('dbo.vwGeraCPF','V') IS NULL
29+
--EXEC('CREATE VIEW dbo.vwGeraCPF as select 1 StubVersion')
30+
--GO
31+
32+
--ALTER VIEW dbo.vwGeraCPF
33+
--AS
34+
35+
36+
37+
SELECT
38+
cnpj =convert(varchar(1),n1)+
39+
convert(varchar(1),n2)+
40+
convert(varchar(1),n3)+
41+
convert(varchar(1),n4)+
42+
convert(varchar(1),n5)+
43+
convert(varchar(1),n6)+
44+
convert(varchar(1),n7)+
45+
convert(varchar(1),n8)+
46+
convert(varchar(1),n9)+
47+
convert(varchar(1),n10)+
48+
convert(varchar(1),n11)+
49+
convert(varchar(1),n12)+
50+
convert(varchar(1),d1)+
51+
convert(varchar(1),d2)
52+
FROM
53+
(
54+
SELECT
55+
C2BASE.*
56+
,d2 = CASE
57+
WHEN d2calc%11 < 2 THEN 0
58+
ELSE 11-d2calc%11
59+
END
60+
61+
FROM (
62+
SELECT
63+
C1.*
64+
,d2calc = n1*6 + n2*5 + n3*4 + n4*3 + n5*2 + n6*9 + n7*8 + n8*7 + n9*6 + n10*5 + n11*4 + + n12*3 + d1*2
65+
FROM
66+
(
67+
68+
SELECT
69+
CASE
70+
WHEN d1calc%11 < 2 THEN 0
71+
ELSE 11-d1calc%11
72+
END as d1
73+
,C1BASE.*
74+
FROM
75+
(
76+
SELECT
77+
*
78+
,d1calc = (n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5)%11
79+
FROM
80+
(
81+
SELECT
82+
convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n1
83+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n2
84+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n3
85+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n4
86+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n5
87+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n6
88+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n7
89+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%10 as n8
90+
,convert(int,0) as n9
91+
,convert(int,0) as n10
92+
,convert(int,0) as n11
93+
,convert(int,1) as n12
94+
) R
95+
) C1BASE
96+
) C1
97+
) C2BASE
98+
) C2
99+
100+

0 commit comments

Comments
 (0)