Sei sulla pagina 1di 11

Validar CPF, CNPJ e Ttulo de Eleitor (Parte I)

Escrito por: Reinaldo Coral


Ensinarei hoje como verificar a validade de um nmero de CPF, CNPJ ou Ttulo de eleitor. Para quem lida diariamente com cadastros de clientes, fornecedores e tudo mais, sabe da importncia de uma verficao como esta. Muitas vezes podemos falar e digitar um nmero importantes destes de maneira errada. A partir da voc j pode imaginar a dor de cabea que um simples numerozinho desses pode gerar! Pensando nisso, elaborei para o uso na planilha do excel uma validao desses nmeros. A forma de calcular j de saber pblico e facilmente encontrada na internet. O que fiz foi desenvolver uma funo de clculo e anlise desse algortimo atravs do VBA do Excel.

Ento Mos obra!!! 1 Validao de nmero de CPF (Cadastro de Pessoa Fsica). Primeiramente vamos entender como se obtm o algortimo do DV(Dgito Verificador) de um CPF. O algortimo para calcular um CPF vlido feito em duas etapas. Primeiro conseguimos o valor para o primeiro digito verificador. Ele obtido atravs do resto da diviso por 11 da soma da multiplicao de cada um dos 9 primeiros algarismos, respectivamente, por 1, 2, 3, 4, 5, 6, 7, 8 e 9. Complicado? Vejamos a ilustrao.

Posio CPF Multiplicar por Resultado a somar

1 5 1 5+

2 5 2 10 +

3 5 3 15 +

4 2 4 8+

5 2 5 10 +

6 2 6 12 +

7 3 7 21 +

8 3 8 24 +

9 10 11 3 0 3 9 27 =132

Obtendo o resto da diviso por 11 ==> 132 / 11 = 12 resto 0. Com isso, conseguimos o primeiro dgito verificador (0). Para o segundo dgito verificador, o procedimento bem parecido, s acrescentamos ao somatrio a multiplicao pelo primeiro dgito obtido anteriormente. Ficar assim:

Posio CPF Multiplicar por Resultado a somar

1 5 0 0+

2 5 1 5+

3 5 2 10 +

4 2 3 6+

5 2 4 8+

6 2 5 10 +

7 3 6 18 +

8 3 7 21 +

9 3 8 24 +

10 11 0 3 9 0 =102

Obtendo o resto da diviso por 11 ==> 102 / 11 = 9 resto 3. Agora, conseguimos o segundo dgito verificador (3). Portanto, o DV para este CPF 03. Bem, eu precisava esclarecer um pouco como funciona o clculo deste algoritimo para que voc pudesse entender como trabalharamos o cdigo. Ento, podemos agora, partir para o seu desenvolvimento. Basicamente, desmembraremos o cpf em algarismos, executaremos as operaes matemticas e, por fim, efetuaremos a comparao dos DVs obtidos com o algortimo com os DVs fornecidos no CPF analizado. V ao ambiente de desenvolvimento do VBA (Alt+F11), insira um novo mdulo e digite o cdigo abaixo.
01 Public Function VerificarCPF(sCPF As String) As String 02 Dim d1 As Integer 03 Dim d2 As Integer 04 Dim d3 As Integer 05 Dim d4 As Integer 06 Dim d5 As Integer 07 Dim d6 As Integer 08 Dim d7 As Integer

09 Dim d8 As Integer 10 Dim d9 As Integer 11 Dim d10 As Integer 12 Dim d11 As Integer 13 Dim DV1 As Integer 14 Dim DV2 As Integer 15 Dim UltDig As Integer 16 17 'Completa com zeros esquerda caso no esteja com os 11 digitos 18 If Len(sCPF) < 11 Then 19 21 22 'Pega a posio do ltimo dgito 23 UltDig = Len(sCPF) 24 25 'Sai da funo caso a clula esteja vazia 26 If sCPF = "00000000000" Then 27 28 VerificarCPF = "" Exit Function sCPF = String(11 - Len(sCPF), "0") & sCPF 20 End If

29 End If 30 31 'Pega cada dgito do CPF informado e 32 'coloca nas variveis especficas 33 34 d1 = CInt(Mid(sCPF, UltDig - 10, 1)) 35 d2 = CInt(Mid(sCPF, UltDig - 9, 1)) 36 d3 = CInt(Mid(sCPF, UltDig - 8, 1)) 37 d4 = CInt(Mid(sCPF, UltDig - 7, 1)) 38 d5 = CInt(Mid(sCPF, UltDig - 6, 1)) 39 d6 = CInt(Mid(sCPF, UltDig - 5, 1)) 40 d7 = CInt(Mid(sCPF, UltDig - 4, 1)) 41 d8 = CInt(Mid(sCPF, UltDig - 3, 1)) 42 d9 = CInt(Mid(sCPF, UltDig - 2, 1)) 43 d10 = CInt(Mid(sCPF, UltDig - 1, 1)) '<----- Aqui so os DVs informados 44 d11 = CInt(Mid(sCPF, UltDig, 1)) '<----- no CPF analizado 45 46 '----------- Aqui executado o calculo para obter os digitos verificadores corretos 47 DV1 = d1 + (d2 * 2) + (d3 * 3) + (d4 * 4) + (d5 * 5) + (d6 * 6) + (d7 * 7) + (d8 * 8) + (d9 * 9) 'Obtem o resto

48 DV1 = DV1 Mod 11 50 If DV1 = 10 Then 51 53 54 DV1 = 0 52 End If

49 'se o resto for igual a 10 altera pra 0

DV2 = d2 + (d3 * 2) + (d4 * 3) + (d5 * 4) + (d6 * 5) + (d7 * 6) + (d8 * 7) + (d9 * 8) + (DV1 * 9)

55 DV2 = DV2 Mod 11 'Obtem o resto 56 'se o resto for igual a 10 altera pra 0 57 If DV2 = 10 Then 58 DV2 = 0 59 End If 60 61 '---------- Fazendo a comparao dos dvs informados ------62 If d10 = DV1 And d11 = DV2 Then 63 VerificarCPF = "CPF Vlido" 64 Else 65 67 68 End Function VerificarCPF = "CPF Invlido" 66 End If

Retorne planilha e para chamar a funo na clula, digite: =VerificarCPF(A1) Supondo que na clula A1 contenha um nmero de CPF. At que parecia mais difcil n? Mas simples. O chato a matemtica! (risos) 2 - Validao de nmero de CNPJ (Cadastro Nacional de Pessoa Jurdica). No caso do CNPJ, o DV corresponde ao resto da diviso por 11 do somatrio da multiplicao de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6 e 5, a partir da unidade. O resto 10 considerado 0. Vejamos a ilustrao para melhor entendimento.

Posio CNPJ Multiplicar por Resultado a somar

1 4 6 24+

2 4 7 28+

3 4 8 32+

4 5 9 45+

5 5 2 10+

6 5 3 15+

7 6 4 24+

8 6 5 30+

9 0 6 0+

10 0 7 0+

11 0 8 0+

12 13 14 1 8 3 9 9 =217

Obtendo o resto da diviso por 11 ==> 217 / 11 = 19 resto 8. Com isso, conseguimos o primeiro dgito verificador (8). Para o segundo dgito verificador, o procedimento bem parecido, s acrescentamos ao somatrio a multiplicao pelo primeiro dgito obtido anteriormente. Ficar assim:

Posio CNPJ Multiplicar por Resultado a somar

1 4 5 20+

2 4 6 24+

3 4 7 28+

4 5 8 40+

5 5 9 45+

6 5 2 10+

7 6 3 18+

8 6 4 24+

9 0 5 0+

10 0 6 0+

11 0 7 0+

12 1 8 8+

13 14 8 3 9 72 =289

Obtendo o resto da diviso por 11 ==> 289 / 11 = 26 resto 3. Agora, conseguimos o segundo dgito verificador (3). Portanto, o DV para este CNPJ 83. Vamos desenvolver o cdigo. Seguiremos o mesmo conceito do clculo do CPF. Desmembraremos o CNPJ em algarismos, executaremos as operaes matemticas e, por fim, efetuaremos a comparao dos DVs obtidos com o algortimo com os DVs fornecidos no CNPJ analizado. V ao ambiente de desenvolvimento do VBA (Alt+F11) e digite o cdigo abaixo num Mdulo.
01 Public Function VerificarCNPJ(sCNPJ As String) As String 02 Dim d1 As Integer 03 Dim d2 As Integer 04 Dim d3 As Integer 05 Dim d4 As Integer 06 Dim d5 As Integer 07 Dim d6 As Integer

08 Dim d7 As Integer 09 Dim d8 As Integer 10 Dim d9 As Integer 11 Dim d10 As Integer 12 Dim d11 As Integer 13 Dim d12 As Integer 14 Dim d13 As Integer 15 Dim d14 As Integer 16 Dim DV1 As Integer 17 Dim DV2 As Integer 18 Dim UltDig As Integer 19 20 'Completa com zeros esquerda caso no esteja com os 14 digitos 21 If Len(sCNPJ) < 14 Then 22 sCNPJ = String(14 - Len(sCNPJ), "0") & sCNPJ 23 End If 24 25 'Pega a posio do ltimo dgito 26 UltDig = Len(sCNPJ) 27 28 'Sai da funo caso a clula esteja vazia 29 If sCNPJ = "00000000000000" Then 30 VerificarCNPJ = "" 31 Exit Function 32 End If 33 34 'Pega cada dgito do CNPJ informado e 35 'coloca nas variveis especficas 36 37 d1 = CInt(Mid(sCNPJ, UltDig - 13, 1)) 38 d2 = CInt(Mid(sCNPJ, UltDig - 12, 1)) 39 d3 = CInt(Mid(sCNPJ, UltDig - 11, 1)) 40 d4 = CInt(Mid(sCNPJ, UltDig - 10, 1)) 41 d5 = CInt(Mid(sCNPJ, UltDig - 9, 1)) 42 d6 = CInt(Mid(sCNPJ, UltDig - 8, 1)) 43 d7 = CInt(Mid(sCNPJ, UltDig - 7, 1)) 44 d8 = CInt(Mid(sCNPJ, UltDig - 6, 1)) 45 d9 = CInt(Mid(sCNPJ, UltDig - 5, 1)) 46 d10 = CInt(Mid(sCNPJ, UltDig - 4, 1)) 47 d11 = CInt(Mid(sCNPJ, UltDig - 3, 1)) 48 d12 = CInt(Mid(sCNPJ, UltDig - 2, 1)) 49 d13 = CInt(Mid(sCNPJ, UltDig - 1, 1)) '<----- Aqui so os DVs informados 50 d14 = CInt(Mid(sCNPJ, UltDig, 1)) '<----- no CNPJ analizado 51 52 '----------- Aqui executado o calculo para obter os digitos verificadores corretos 53 DV1 = (d1 * 6) + (d2 * 7) + (d3 * 8) + (d4 * 9) + (d5 * 2) + (d6 * 3) + (d7 * 4) + (d8 * 5) + (d9 * 6) + (d10 * 7) + (d11 * 8) + (d12 * 9) 'Obtem o resto

54 DV1 = DV1 Mod 11

55 'se o resto for igual a 10 altera pra 0 56 If DV1 = 10 Then 57 59 60 DV2 = (d1 * 5) + (d2 * 6) + (d3 * 7) + (d4 * 8) + (d5 * 9) + (d6 * 2) + (d7 * 3) + (d8 * 4) + (d9 * 5) + (d10 * 6) + (d11 * 7) + (d12 * 8) + (DV1 * 9) DV1 = 0 58 End If

61 DV2 = DV2 Mod 11 'Obtem o resto 62 'se o resto for igual a 10 altera pra 0 63 If DV2 = 10 Then 64 DV2 = 0 65 End If 66 67 '---------- Fazendo a comparao dos dvs informados ------68 If d13 = DV1 And d14 = DV2 Then 69 VerificarCNPJ = "CNPJ Vlido" 70 Else 71 73 74 End Function VerificarCNPJ = "CNPJ Invlido" 72 End If

Retorne planilha e para chamar a funo na clula, digite: =VerificarCNPJ(A1) Supondo que na clula A1 contenha um nmero de CNPJ. Bem, resta, agora, a funo de validao de um Ttulo Eleitoral. Para no estender demais este artigo, postarei numa nova oportunidade a segunda parte deste artigo, abordando como validar um ttulo de eleitor. At l. Termos aprendidos neste artigo:
Len
Retorna um Long que contm o nmero de caracteres existentes em uma seqncia de caracteres ou o nmero de bytes necessrios para armazenar uma varivel. Sintaxe Len(string | varname) A sintaxe da funo Len tem as seguintes partes:

Parte String Varname

Descrio Qualquer expresso de seqncia vlida. Se string contiver Null, ser retornado Null. Qualquer nome de varivel vlido. Se varname contiver Null, ser retornadoNull. Se varname for uma Variant, Len tratar essa variante como uma String e retornar sempre o nmero de caracteres nela contidos.

String

Retorna uma Variant (String) que contm uma seqncia de caracteres repetida com o comprimento especificado. Sintaxe String(number, character) A sintaxe da funo String tem os seguintes argumentos nomeados:

Parte number

Descrio Obrigatria; Long. Comprimento da seqncia de caracteres

retornada. Senumber contiver Null, ser retornado Null. character Obrigatria; Variant. Cdigo de caractere especificando o caractere ou expresso de seqncia cujo primeiro caractere usado para formar a seqncia de caracteres de retorno. Se character contiver Null, ser retornadoNull.

CInt

Converte uma expresso no tipo de dados Integer. Sintaxe

Mid

CInt(expression) Retorna uma Variant (String) que contm um nmero especificado de caracteres de uma seqncia de caracteres. Sintaxe Mid(string, start[, length]) A sintaxe da funo Mid tem os seguintes argumentos nomeados:

Parte string start

Descrio Obrigatria. Expresso de seqncia da qual so retornados os caracteres. Sestring contiver Null, ser retornado Null. Obrigatria; Long. A posio do caractere em string onde a parte a ser considerada comea. Se start for maior que o nmero de caracteres existentes em string, a funo Mid retornar uma seqncia de caracteres de comprimento zero (""). Opcional; Variant (Long). Nmero de caracteres a ser retornado. Se omitido ou se existirem menos caracteres do que os de length no texto (inclusive o caractere em start), sero retornados todos os caracteres a partir da posio start at o final da seqncia de caracteres.

length

Mod

Operador usado para dividir dois nmeros e retornar somente o resto. Sintaxe result = number1 Mod number2 A sintaxe do operador Mod possui as seguintes partes:

Parte result

Descrio Obrigatria; qualquer varivel numrica.

number1 Obrigatria; qualquer expresso numrica. number2 Obrigatria; qualquer expresso numrica.
Comentrios O operador de mdulo, ou resto, divide number1 por number2 (arredondando nmeros de ponto flutuante para inteiros) e retorna somente o resto como result. Por exemplo, na expresso a seguir, A (result) igual a 5.

A = 19 Mod 6.7

Validar CPF, CNPJ e Ttulo de Eleitor (Parte II)


Escrito por: Reinaldo Coral
Continuando o artigo anterior sobre Validao de CPF, CNPJ e Ttulo de Eleitor, abordarei hoje como verificar a validade de um nmero de um Ttulo de eleitor. Para quem no leu a primeira parte do artigo, leia aqui. O objetivo da funo que desenvolveremos de verificar se um nmero de ttulo eleitoral digitado vlido. Elaborei esta frmula para o uso na planilha do excel de forma que execute a validao desses nmeros. A forma de calcular j de saber pblico e facilmente encontrada na internet. O que fiz foi desenvolver uma funo de clculo e anlise desse algortimo atravs do VBA do Excel.

Ento Mos obra!!! 1 Validao de nmero de Ttulo Eleitoral. Primeiramente vamos entender como se obtm o algortimo do DV(Dgito Verificador) de um Ttulo Eleitoral. O algortimo para calcular um Ttulo Eleitoral vlido feito de maneira similar ao do CPF e CNPJ. Primeiro conseguimos o valor para o primeiro digito verificador. Ele obtido atravs do resto da diviso por 11 da soma da multiplicao de cada um dos 8 primeiros algarismos, respectivamente, por 2, 3, 4, 5, 6, 7, 8 e 9. Vejamos a ilustrao.

Posio Ttulo Eleitoral Multiplicar por Resultado a somar

1 1 2 2+

2 0 3 0+

3 6 4 24 +

4 6 5 30 +

5 4 6 24 +

6 4 7 28 +

7 4 8 32 +

8 4 9 36 +

9 10 11 12 0 3 0 2 =176

Obtendo o resto da diviso por 11 ==> 176 / 11 = 16 resto 0. Com isso, conseguimos o primeiro dgito verificador (0). Paraa obteno do segundo dgito verificador, tomaremos os dois dgitos que correspondem a UF do ttulo. Eles ficam nas posies 9 e 10. Incluiremos o primeiro DV obtido e multiplicaremos por 7, 8 e9, respectivamente. Somaremos o produto e dividiremos por 11, aproveitando apenas o resto da diviso. Veja a tabela.

Posio Ttulo Eleitoral Multiplicar por Resultado a somar

1 1

2 0

3 6

4 6

5 4

6 4

7 4

8 4

9 0 7 0+

10 3 8 24

11 0 9 0

12 2 =24

Obtendo o resto da diviso por 11 ==> 24 / 11 = 2 resto 2. Agora, conseguimos o segundo dgito verificador (2). Portanto, o DV para este Ttulo Eleitoral 02. Quando falei em algarismos que correspondem a UF, me referia a tabela de UFs que so vlidas para as posies 9 e 10 do nmero do ttulo de eleitor. Veja a tabela.

UF SP MG RJ RS BA PR CE PE SC GO

Cdigo 01 02 03 04 05 06 07 08 09 10

UF PI RN AL MT MS DF SE AM RS AC

Cdigo 15 16 17 18 19 20 21 22 23 24

MA PB PA ES

11 12 13 14

AP RR TO ZZ-Exterior

25 26 27 28

Vamos transferir toda essa matemtica agora para a funo VBA. No cdigo, desmembraremos o nmero do ttulo em algarismos, executaremos as operaes matemticas e, por fim, efetuaremos a comparao dos DVs obtidos com o algortimo com os DVs fornecidos no Ttulo Eleitoral analizado. V ao ambiente de desenvolvimento do VBA (Alt+F11), insira um novo mdulo e digite o cdigo abaixo.
01 Public Function VerificarTituloEleitor(sTitulo As String) As String 02 Dim d1 As Integer 03 Dim d2 As Integer 04 Dim d3 As Integer 05 Dim d4 As Integer 06 Dim d5 As Integer 07 Dim d6 As Integer 08 Dim d7 As Integer 09 Dim d8 As Integer 10 Dim d9 As Integer 11 Dim d10 As Integer 12 Dim d11 As Integer 13 Dim d12 As Integer 14 Dim DV1 As Integer 15 Dim DV2 As Integer 16 Dim UltDig As Integer 17 18 'Completa com zeros esquerda caso no esteja com os 11 digitos 19 If Len(sTitulo) < 12 Then 20 sTitulo = String(12 - Len(sTitulo), "0") & sTitulo 21 End If 22 23 'Pega a posio do ltimo dgito 24 UltDig = Len(sTitulo) 25 26 'Sai da funo caso a clula esteja vazia 27 If sTitulo = "000000000000" Then 28 VerificarTituloEleitor = "" 29 Exit Function 30 End If 31 32 'Pega cada dgito do CPF informado e 33 'coloca nas variveis especficas 34 35 d1 = CInt(Mid(sTitulo, UltDig - 11, 1)) 36 d2 = CInt(Mid(sTitulo, UltDig - 10, 1)) 37 d3 = CInt(Mid(sTitulo, UltDig - 9, 1)) 38 d4 = CInt(Mid(sTitulo, UltDig - 8, 1))

39 d5 = CInt(Mid(sTitulo, UltDig - 7, 1)) 40 d6 = CInt(Mid(sTitulo, UltDig - 6, 1)) 41 d7 = CInt(Mid(sTitulo, UltDig - 5, 1)) 42 d8 = CInt(Mid(sTitulo, UltDig - 4, 1)) 43 d9 = CInt(Mid(sTitulo, UltDig - 3, 1)) 44 d10 = CInt(Mid(sTitulo, UltDig - 2, 1)) 45 d11 = CInt(Mid(sTitulo, UltDig - 1, 1)) '<----- Aqui so os DVs informados 46 d12 = CInt(Mid(sTitulo, UltDig, 1)) '<----- no Ttlo Eleitoral analizado 47 48 '----------- Aqui executado o calculo para obter os digitos verificadores corretos 49 DV1 = (d1 * 2) + (d2 * 3) + (d3 * 4) + (d4 * 5) + (d5 * 6) + (d6 * 7) + (d7 * 8) + (d8 * 9) 'Obtem o resto

50 DV1 = DV1 Mod 11 52 If DV1 = 10 Then 53 55 DV1 = 0 54 End If

51 'se o resto for igual a 10 altera pra 0

56 DV2 = (d9 * 7) + (d10 * 8) + (DV1 * 9) 57 DV2 = DV2 Mod 11 'Obtem o resto 58 'se o resto for igual a 10 altera pra 0 59 If DV2 = 10 Then 60 DV2 = 0 61 End If 62 63 '---------- Fazendo a comparao dos dvs informados ------64 If d11 = DV1 And d12 = DV2 Then 65 66 67 68 69 70 Else 71 73 74 End Function VerificarTituloEleitor = "Ttulo Eleitoral Invlido" 72 End If If CInt(d9 & d10) > 0 And CInt(d9 & d10) < 29 Then VerificarTituloEleitor = "Ttulo Eleitoral Vlido" Else VerificarTituloEleitor = "Ttulo Eleitoral Invlido" End If

Retorne planilha e para chamar a funo na clula, digite: =VerificarTituloEleitor(A1) Supondo que na clula A1 contenha um nmero de Ttulo Eleitoral. Bom! Finalizamos mais um artigo. Espero ajudar bastante seus trabalhos. Gostaria de lembrar a voc que eu desenvolvo funes personalizadas por encomenda. Caso necessite de um projeto bem elaborado e funcional, solicitem um oramento . Um abrao. Faa o Download do Arquivo Fonte no final deste artigo. Termos aprendidos neste artigo:
Len
Retorna um Long que contm o nmero de caracteres existentes em uma seqncia de caracteres ou o nmero de bytes necessrios para armazenar uma varivel. Sintaxe Len(string | varname)

A sintaxe da funo Len tem as seguintes partes:

Parte String Varname

Descrio Qualquer expresso de seqncia vlida. Se string contiver Null, ser retornado Null. Qualquer nome de varivel vlido. Se varname contiver Null, ser retornadoNull. Se varname for uma Variant, Len tratar essa variante como uma String e retornar sempre o nmero de caracteres nela contidos.

String

Retorna uma Variant (String) que contm uma seqncia de caracteres repetida com o comprimento especificado. Sintaxe String(number, character) A sintaxe da funo String tem os seguintes argumentos nomeados:

Parte number character

Descrio Obrigatria; Long. Comprimento da seqncia de caracteres retornada. Senumber contiver Null, ser retornado Null. Obrigatria; Variant. Cdigo de caractere especificando o caractere ou expresso de seqncia cujo primeiro caractere usado para formar a seqncia de caracteres de retorno. Se character contiver Null, ser retornadoNull.

CInt

Converte uma expresso no tipo de dados Integer. Sintaxe

Mid

CInt(expression) Retorna uma Variant (String) que contm um nmero especificado de caracteres de uma seqncia de caracteres. Sintaxe Mid(string, start[, length]) A sintaxe da funo Mid tem os seguintes argumentos nomeados:

Parte string start

Descrio Obrigatria. Expresso de seqncia da qual so retornados os caracteres. Sestring contiver Null, ser retornado Null. Obrigatria; Long. A posio do caractere em string onde a parte a ser considerada comea. Se start for maior que o nmero de caracteres existentes em string, a funo Mid retornar uma seqncia de caracteres de comprimento zero (""). Opcional; Variant (Long). Nmero de caracteres a ser retornado. Se omitido ou se existirem menos caracteres do que os de length no texto (inclusive o caractere em start), sero retornados todos os caracteres a partir da posio start at o final da seqncia de caracteres.

length

Mod

Operador usado para dividir dois nmeros e retornar somente o resto. Sintaxe result = number1 Mod number2 A sintaxe do operador Mod possui as seguintes partes:

Parte result

Descrio Obrigatria; qualquer varivel numrica.

number1 Obrigatria; qualquer expresso numrica.

number2 Obrigatria; qualquer expresso numrica.


Comentrios O operador de mdulo, ou resto, divide number1 por number2 (arredondando nmeros de ponto flutuante para inteiros) e retorna somente o resto como result. Por exemplo, na expresso a seguir, A (result) igual a 5.

A = 19 Mod 6.7

Potrebbero piacerti anche