Skip to content

Commit b289874

Browse files
committed
Revisado scripts uteis para gerar CPF
1 parent f0721dc commit b289874

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed

Misc/fn.GerarCPF.sql

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*#info
2+
3+
# Autor
4+
Rodrigo Ribeiro Gomes
5+
6+
# Descricao
7+
Gera um determinado número de CPFs.
8+
Depende da view criada pelo script vw.GerarCPF.sql
9+
10+
*/
11+
12+
USE master
13+
GO
14+
15+
16+
IF OBJECT_ID('dbo.fnGerarCpf','IF') IS NULL
17+
EXEC('CREATE FUNCTION dbo.fnGerarCpf() RETURNS TABLE AS RETURN (select 1 as StubVersion)')
18+
GO
19+
20+
ALTER FUNCTION dbo.fnGerarCpf(@MaxCpfs int)
21+
RETURNS TABLE
22+
AS
23+
RETURN (
24+
WITH nseed AS (
25+
SELECT 1 as N
26+
UNION ALL
27+
SELECT N+1 FROM nseed WHERE N < 100
28+
),
29+
N AS (
30+
SELECT top(@MaxCpfs) n1.* FROM nseed n1,nseed n2,nseed n3,nseed n4,nseed n5
31+
)
32+
select
33+
C.cpf
34+
from
35+
N
36+
cross apply (
37+
select * from dbo.vwGeraCPF
38+
) C
39+
)
40+
41+
42+
43+
44+
45+
46+
47+

Misc/vw.GerarCPF.sql

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
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.vwGerarCPF','V') IS NOT NULL
29+
EXEC('CREATE VIEW dbo.vwGerarCPF as select 1')
30+
GO
31+
32+
ALTER VIEW dbo.vwGeraCPF
33+
AS
34+
35+
36+
37+
SELECT
38+
cpf = 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),d1)+
48+
convert(varchar(1),d2)
49+
FROM
50+
(
51+
SELECT
52+
C2BASE.*
53+
,d2 = CASE
54+
WHEN d2calc%11 < 2 THEN 0
55+
ELSE 11-d2calc%11
56+
END
57+
58+
FROM (
59+
SELECT
60+
C1.*
61+
,d2calc = d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11
62+
FROM
63+
(
64+
65+
SELECT
66+
CASE
67+
WHEN d1calc%11 < 2 THEN 0
68+
ELSE 11-d1calc%11
69+
END as d1
70+
,C1BASE.*
71+
FROM
72+
(
73+
SELECT
74+
*
75+
,d1calc = (n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10)%11
76+
FROM
77+
(
78+
SELECT
79+
convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n1
80+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n2
81+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n3
82+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n4
83+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n5
84+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n6
85+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n7
86+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n8
87+
,convert(int,1000*RAND(CHECKSUM(NEWID())))%9 as n9
88+
) R
89+
) C1BASE
90+
) C1
91+
) C2BASE
92+
) C2
93+
94+

0 commit comments

Comments
 (0)