brutils 2.2.0__tar.gz → 2.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {brutils-2.2.0 → brutils-2.4.0}/PKG-INFO +509 -15
  2. {brutils-2.2.0 → brutils-2.4.0}/README.md +499 -8
  3. brutils-2.4.0/brutils/__init__.py +169 -0
  4. {brutils-2.2.0 → brutils-2.4.0}/brutils/cep.py +10 -8
  5. brutils-2.4.0/brutils/cnh.py +86 -0
  6. {brutils-2.2.0 → brutils-2.4.0}/brutils/cnpj.py +9 -9
  7. {brutils-2.2.0 → brutils-2.4.0}/brutils/cpf.py +9 -9
  8. brutils-2.4.0/brutils/currency.py +110 -0
  9. brutils-2.4.0/brutils/data/cities_code.json +5626 -0
  10. brutils-2.4.0/brutils/data/enums/__init__.py +1 -0
  11. brutils-2.4.0/brutils/data/enums/months.py +57 -0
  12. {brutils-2.2.0 → brutils-2.4.0}/brutils/data/enums/uf.py +31 -1
  13. brutils-2.4.0/brutils/date_utils.py +95 -0
  14. {brutils-2.2.0 → brutils-2.4.0}/brutils/email.py +1 -1
  15. brutils-2.4.0/brutils/ibge/__init__.py +0 -0
  16. brutils-2.4.0/brutils/ibge/municipality.py +176 -0
  17. brutils-2.4.0/brutils/ibge/uf.py +120 -0
  18. brutils-2.4.0/brutils/legal_nature.py +165 -0
  19. {brutils-2.2.0 → brutils-2.4.0}/brutils/legal_process.py +11 -8
  20. {brutils-2.2.0 → brutils-2.4.0}/brutils/license_plate.py +14 -12
  21. brutils-2.4.0/brutils/passport.py +107 -0
  22. {brutils-2.2.0 → brutils-2.4.0}/brutils/phone.py +13 -13
  23. brutils-2.4.0/brutils/renavam.py +56 -0
  24. {brutils-2.2.0 → brutils-2.4.0}/brutils/voter_id.py +11 -10
  25. {brutils-2.2.0 → brutils-2.4.0}/pyproject.toml +8 -6
  26. brutils-2.2.0/brutils/__init__.py +0 -168
  27. brutils-2.2.0/brutils/data/enums/__init__.py +0 -1
  28. {brutils-2.2.0 → brutils-2.4.0}/LICENSE +0 -0
  29. {brutils-2.2.0 → brutils-2.4.0}/brutils/data/enums/better_enum.py +0 -0
  30. {brutils-2.2.0 → brutils-2.4.0}/brutils/data/legal_process_ids.json +0 -0
  31. {brutils-2.2.0 → brutils-2.4.0}/brutils/exceptions/__init__.py +0 -0
  32. {brutils-2.2.0 → brutils-2.4.0}/brutils/exceptions/cep.py +0 -0
  33. {brutils-2.2.0 → brutils-2.4.0}/brutils/pis.py +0 -0
  34. {brutils-2.2.0/brutils/types → brutils-2.4.0/brutils/schemas}/__init__.py +0 -0
  35. {brutils-2.2.0/brutils/types → brutils-2.4.0/brutils/schemas}/address.py +0 -0
@@ -1,12 +1,12 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: brutils
3
- Version: 2.2.0
3
+ Version: 2.4.0
4
4
  Summary: Utils library for specific Brazilian businesses
5
- Home-page: https://github.com/brazilian-utils/brutils
6
5
  License: MIT
6
+ License-File: LICENSE
7
7
  Keywords: cpf,cnpj,cep,document,validation,brazil,brazilian
8
8
  Author: The Brazilian Utils Organization
9
- Requires-Python: >=3.8.1,<4.0.0
9
+ Requires-Python: >=3.10,<4.0
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Natural Language :: English
@@ -14,24 +14,29 @@ Classifier: Natural Language :: Portuguese
14
14
  Classifier: Natural Language :: Portuguese (Brazilian)
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.9
18
17
  Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
21
22
  Classifier: Programming Language :: Python :: 3 :: Only
22
- Classifier: Programming Language :: Python :: 3.8
23
23
  Classifier: Topic :: Office/Business
24
24
  Classifier: Topic :: Software Development :: Internationalization
25
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
- Project-URL: Repository, https://github.com/brazilian-utils/brutils
26
+ Requires-Dist: coverage (>=7.2.7,<8.0.0)
27
+ Requires-Dist: holidays (>=0.58,<0.95)
28
+ Requires-Dist: num2words (==0.5.14)
29
+ Project-URL: Repository, https://github.com/brazilian-utils/python
27
30
  Description-Content-Type: text/markdown
28
31
 
32
+ ![Logo do Brazilian Utils](https://github.com/brazilian-utils/brand/raw/main/github-hero/github-hero-python.png)
33
+
29
34
  <div align="center">
30
- <h1>🇧🇷 Brazilian Utils</h1>
31
35
 
32
- <p>Utils library for Brazilian-specific businesses.</p>
36
+ <p>Biblioteca de utilitários projetada para validar, gerar e manipular dados de acordo com as particularidades do Brasil</p>
33
37
 
34
- [![codecov](https://codecov.io/gh/brazilian-utils/brutils-python/branch/main/graph/badge.svg?token=5KNECS8JYF)](https://codecov.io/gh/brazilian-utils/brutils-python)
38
+ [![codecov](https://codecov.io/gh/brazilian-utils/python/branch/main/graph/badge.svg)](https://codecov.io/gh/brazilian-utils/python)
39
+ [![Check Lint](https://github.com/brazilian-utils/python/actions/workflows/check-lint.yml/badge.svg?branch=main)](https://github.com/brazilian-utils/python/actions/workflows/check-lint.yml?query=branch%3Amain)
35
40
  [![Downloads per Month](https://shields.io/pypi/dm/brutils)](https://pypistats.org/packages/brutils)
36
41
  [![Package version](https://shields.io/pypi/v/brutils)](https://pypi.org/project/brutils/)
37
42
 
@@ -68,7 +73,6 @@ False
68
73
  ```
69
74
 
70
75
  # Utilitários
71
-
72
76
  - [CPF](#cpf)
73
77
  - [is\_valid\_cpf](#is_valid_cpf)
74
78
  - [format\_cpf](#format_cpf)
@@ -94,6 +98,10 @@ False
94
98
  - [generate\_phone](#generate_phone)
95
99
  - [Email](#email)
96
100
  - [is\_valid\_email](#is_valid_email)
101
+ - [Data](#date)
102
+ - [convert\_date\_to_text](#convert_date_to_text)
103
+ - [CNH](#cnh)
104
+ - [is\_valid\_cnh](#is_valid_cnh)
97
105
  - [Placa de Carro](#placa-de-carro)
98
106
  - [is\_valid\_license\_plate](#is_valid_license_plate)
99
107
  - [format\_license\_plate](#format_license_plate)
@@ -111,10 +119,32 @@ False
111
119
  - [format\_legal\_process](#format_legal_process)
112
120
  - [remove\_symbols\_legal\_process](#remove_symbols_legal_process)
113
121
  - [generate\_legal\_process](#generate_legal_process)
114
- - [Título Eleitoral](#titulo-eleitoral)
115
- - [is_valid_voter_id](#is_valid_voter_id)
116
- - [format_voter_id](#format_voter_id)
117
- - [generate_voter_id](#generate_voter_id)
122
+ - [RENAVAM](#renavam)
123
+ - [is_valid_renavam](#is_valid_renavam)
124
+ - [Titulo Eleitoral](#titulo-eleitoral)
125
+ - [is\_valid\_voter\_id](#is_valid_voter_id)
126
+ - [format\_voter\_id](#format_voter_id)
127
+ - [generate\_voter\_id](#generate_voter_id)
128
+ - [IBGE](#ibge)
129
+ - [convert_code_to_uf](#convert_code_to_uf)
130
+ - [convert_uf_to_name](#convert_uf_to_name)
131
+ - [convert_name_to_uf](#convert_name_to_uf)
132
+ - [get_code_by_municipality_name](#get_code_by_municipality_name)
133
+ - [get\_municipality\_by\_code](#get_municipality_by_code)
134
+ - [Feriados](#feriados)
135
+ - [is_holiday](#is_holiday)
136
+ - [Monetário](#monetário)
137
+ - [format\_currency](#format_currency)
138
+ - [convert\_real\_to\_text](#convert_real_to_text)
139
+ - [Natureza Jurídica](#natureza-jurídica)
140
+ - [is_valid_legal_nature](#is_valid_legal_nature)
141
+ - [get_legal_nature_description](#get_legal_nature_description)
142
+ - [list_all_legal_nature](#list_all_legal_nature)
143
+ - [Passaporte](#passaporte)
144
+ - [is_valid_passport](#is_valid_passport)
145
+ - [format_passport](#format_passport)
146
+ - [remove_symbols_passport](#remove_symbols_passport)
147
+ - [generate_passport](#generate_passport)
118
148
 
119
149
  ## CPF
120
150
 
@@ -654,6 +684,64 @@ False
654
684
  False
655
685
  ```
656
686
 
687
+ ## Data
688
+
689
+ ## convert_date_to_text
690
+
691
+ Converte uma data em sua representação textual.
692
+
693
+ Argumentos:
694
+ - date (str): Uma string no formato dd/mm/aaaa
695
+
696
+ Retorna:
697
+ - A represetação textual da data ou None caso a data esteja mal formatada ou a data seja inválida.
698
+
699
+ Exemplo:
700
+
701
+ ````python
702
+ >>> from brutils import convert_date_to_text
703
+ >>> convert_date_to_text("25/12/2000")
704
+ "Vinte e cinco de dezembro de dois mil"
705
+ >>> convert_date_to_text("31/02/2000")
706
+ None
707
+ >>> convert_date_to_text("29/02/2024")
708
+ "Vinte e nove de fevereiro de dois mil e vinte e quatro"
709
+ >>> convert_date_to_text("1/08/2024")
710
+ "Primeiro de agosto de dois mil e vinte e quatro"
711
+ ````
712
+
713
+ ## CNH
714
+
715
+ ### is_valid_cnh
716
+
717
+ Verifica se o número de registro de CNH (Carteira de Habilitação Nacional) brasileiro é válido.
718
+ Para que um número de CNH seja considerado válido, a entrada deve ser uma string contendo
719
+ exatamente 11 dígitos numéricos. Esta função não verifica se o número da CNH é real, apenas
720
+ valida os dígitos verificadores.
721
+
722
+ Argumentos:
723
+
724
+ - cnh (str): A string contendo o número de registro de CNH a ser verificado.
725
+
726
+ Retorno:
727
+
728
+ - bool: True se o número de registro da CNHN for válido (11 dígitos), False caso contrário.
729
+
730
+ Exemplo:
731
+
732
+ ```python
733
+ >>> from brutils import is_valid_cnh
734
+ >>> is_valid_cnh("12345678901")
735
+ False
736
+ >>> is_valid_cnh("A2C45678901")
737
+ False
738
+ >>> is_valid_cnh("98765432100")
739
+ True
740
+ >>> is_valid_cnh("987654321-00")
741
+ True
742
+ ```
743
+
744
+
657
745
  ## Placa de Carro
658
746
 
659
747
  ### is_valid_license_plate
@@ -1112,6 +1200,404 @@ Exemplo:
1112
1200
  '950125640248'
1113
1201
  ```
1114
1202
 
1203
+ ## IBGE
1204
+
1205
+ ### convert_code_to_uf
1206
+ Converte um determinado código do IBGE (string de 2 dígitos) para sua UF (abreviatura estadual) correspondente.
1207
+
1208
+ Args:
1209
+ * code (str): O código IBGE de 2 dígitos a ser convertido.
1210
+
1211
+ Retorna:
1212
+ * str or None: O código UF correspondente ao código IBGE, ou None se o
1213
+ código IBGE for inválido.
1214
+
1215
+ Exemplo:
1216
+
1217
+ ```python
1218
+ >>> from brutils.ibge.uf import convert_code_to_uf
1219
+ >>> convert_code_to_uf("12")
1220
+ 'AC'
1221
+ >>> convert_code_to_uf("33")
1222
+ 'RJ'
1223
+ >>> convert_code_to_uf("99")
1224
+ >>>
1225
+ ```
1226
+
1227
+ ### get_code_by_municipality_name
1228
+
1229
+ Retorna o código IBGE para um dado nome de município e código de UF.
1230
+
1231
+ Essa função recebe uma string representando o nome de um município e o código da UF, e retorna o código IBGE correspondente (string). A função lida com os nomes ignorando diferenças de maiúsculas, acentos, tratando o caractere "ç" como "c", e ignorando diferenças de maiúsculas para o código da UF.
1232
+
1233
+ Argumentos:
1234
+ * municipality_name (str): O nome do município.
1235
+ * uf (str): O código UF do estado.
1236
+
1237
+ Retorna:
1238
+ * str: O código IBGE do município. Retorna None se o nome não for válido ou não existir.
1239
+
1240
+ Exemplo:
1241
+
1242
+ ```python
1243
+ >>> from brutils import get_code_by_municipality_name
1244
+ >>> get_code_by_municipality_name("São Paulo", "SP")
1245
+ "3550308"
1246
+ >>> get_code_by_municipality_name("goiania", "go")
1247
+ "5208707"
1248
+ >>> get_code_by_municipality_name("Conceição do Coité", "BA")
1249
+ "2908408"
1250
+ >>> get_code_by_municipality_name("conceicao do Coite", "Ba")
1251
+ "2908408"
1252
+ >>> get_code_by_municipality_name("Municipio Inexistente", "")
1253
+ None
1254
+ >>> get_code_by_municipality_name("Municipio Inexistente", "RS")
1255
+ None
1256
+ ```
1257
+
1258
+ ### get_municipality_by_code
1259
+
1260
+ Retorna o nome do município e a UF para um código do IBGE.
1261
+
1262
+ Args:
1263
+ * code (str): O código do IBGE para o município.
1264
+
1265
+ Returns:
1266
+ * tuple: Retorna uma Tupla formatado como ("Município", "UF").
1267
+ * None: Retorna None se o código for inválido.
1268
+
1269
+ Example:
1270
+
1271
+ ```python
1272
+ >>> from brutils import get_municipality_by_code
1273
+ >>> get_municipality_by_code(3550308)
1274
+ ("São Paulo", "SP")
1275
+ ```
1276
+
1277
+ ### convert_uf_to_name
1278
+ Converte um código de UF brasileiro (por exemplo, 'SP') no nome completo do estado ('São Paulo').
1279
+
1280
+ A busca é case-insensitive (não diferencia maiúsculas de minúsculas) e ignora espaços em branco ao redor.
1281
+
1282
+ Argumentos:
1283
+ * uf (str): Código de UF com duas letras.
1284
+
1285
+ Retorna:
1286
+ * str | None: O nome completo do estado, ou ``None`` se o código for inválido.
1287
+
1288
+ Exemplo:
1289
+
1290
+ ```python
1291
+ >>> from brutils.ibge.uf import convert_uf_to_name
1292
+ >>> convert_uf_to_name('SP')
1293
+ 'São Paulo'
1294
+ >>> convert_uf_to_name('rj')
1295
+ 'Rio de Janeiro'
1296
+ ```
1297
+
1298
+ ### convert_name_to_uf
1299
+ Converte o nome completo de um estado brasileiro para seu código UF.
1300
+
1301
+ Esta função recebe o nome completo de um estado brasileiro e retorna o código UF de duas letras correspondente. A comparação ignora maiúsculas/minúsculas e acentos.
1302
+
1303
+ Argumentos:
1304
+ * state_name (str): O nome completo do estado (por exemplo, 'São Paulo', 'sao paulo').
1305
+
1306
+ Retorna:
1307
+ * str | None: O código UF se encontrado, ou None se o nome do estado for inválido.
1308
+
1309
+ Exemplo:
1310
+
1311
+ ```python
1312
+ >>> from brutils.ibge.uf import convert_name_to_uf
1313
+ >>> convert_name_to_uf('São Paulo')
1314
+ 'SP'
1315
+ >>> convert_name_to_uf('sao paulo')
1316
+ 'SP'
1317
+ >>> convert_name_to_uf('Rio de Janeiro')
1318
+ 'RJ'
1319
+ >>> convert_name_to_uf('rio de janeiro')
1320
+ 'RJ'
1321
+ >>> convert_name_to_uf('Estado Inválido')
1322
+ >>>
1323
+ ```
1324
+
1325
+ ## Feriados
1326
+
1327
+ ### is_holiday
1328
+
1329
+ Verifica se uma determinada data é um feriado nacional ou estadual no Brasil.
1330
+
1331
+ Esta função recebe um objeto `datetime` como a data e uma UF opcional (Unidade Federativa) para especificar feriados estaduais. Retorna `True` se a data for um feriado, `False` se não for, ou `None` se a data ou UF forem inválidas. Nota: a função não abrange feriados municipais.
1332
+
1333
+ Argumentos:
1334
+
1335
+ - `date (datetime)`: A data a ser verificada.
1336
+ - `uf (str, opcional)`: A abreviação do estado (UF) para verificar feriados estaduais. Se não fornecido, apenas feriados nacionais são considerados.
1337
+
1338
+ Retorna:
1339
+
1340
+ - `bool | None`: `True` se a data for um feriado, `False` se não for, ou `None` se a data ou UF forem inválidas.
1341
+
1342
+ Exemplo:
1343
+
1344
+ ```python
1345
+ >>> from datetime import datetime
1346
+ >>> from brutils import is_holiday
1347
+
1348
+ >>> is_holiday(datetime(2024, 1, 1))
1349
+ True
1350
+ >>> is_holiday(datetime(2024, 1, 2))
1351
+ False
1352
+ >>> is_holiday(datetime(2024, 3, 2), uf="SP")
1353
+ False
1354
+ >>> is_holiday(datetime(2024, 12, 25), uf="RJ")
1355
+ True
1356
+ ```
1357
+
1358
+ ## Monetário
1359
+
1360
+ ### format_currency
1361
+
1362
+ Formata um número seguindo o padrão monetário brasileiro. O número será formatado
1363
+ adicionando o símbolo R$ como prefixo, vírgula como separador decimal, e ponto como
1364
+ agrupador de milhar.
1365
+
1366
+ Argumentos:
1367
+ * float ou Decimal: Um número com ou sem casas decimais.
1368
+
1369
+ Retorna:
1370
+ * str ou None: O número formatado seguindo o padrão brasileiro.
1371
+
1372
+ Exemplo:
1373
+
1374
+ ```python
1375
+ >>> from brutils.currency import format_currency
1376
+ >>> format_currency(1259.03)
1377
+ 'R$ 1.259,03'
1378
+ >>> format_currency(0)
1379
+ 'R$ 0,00'
1380
+ >>> format_currency("not a number")
1381
+ None
1382
+ ```
1383
+
1384
+ ### convert_real_to_text
1385
+
1386
+ Converte um valor monetário em reais para sua representação por extenso. Esta função recebe um número decimal representando um valor monetário em reais e o converte para uma string com o valor escrito por extenso em português do Brasil. Ela trata tanto a parte inteira (reais) quanto a parte fracionária (centavos), respeitando a gramática correta para os casos de singular e plural, bem como casos especiais como zero e valores negativos.
1387
+
1388
+ Argumentos:
1389
+ - amount (decimal): O valor monetário a ser convertido por extenso.
1390
+ - A parte inteira representa os reais.
1391
+ - A parte decimal representa os centavos.
1392
+ - 2 casas decimais.
1393
+
1394
+ Retorna:
1395
+ - str: Uma string com o valor monetário escrito por extenso em português do Brasil.
1396
+ - Retorna "Zero reais" para o valor 0,00.
1397
+ - Retorna None se o valor for inválido ou absolutamente maior que 1 quatrilhão.
1398
+ - Trata valores negativos, adicionando "Menos" no início da string.
1399
+
1400
+ Limitações:
1401
+ - Esta função pode perder precisão em ±1 centavo para casos em que o valor absoluto
1402
+ ultrapasse trilhões devido a erros de arredondamento de ponto flutuante.
1403
+
1404
+ Exemplo:
1405
+
1406
+ ```python
1407
+ >>> from brutils.currency import convert_real_to_text
1408
+ >>> convert_real_to_text(1523.45)
1409
+ 'Mil, quinhentos e vinte e três reais e quarenta e cinco centavos'
1410
+ >>> convert_real_to_text(0.01)
1411
+ 'Um centavo'
1412
+ >>> convert_real_to_text(0.00)
1413
+ 'Zero reais'
1414
+ >>> convert_real_to_text(-50.25)
1415
+ 'Menos cinquenta reais e vinte e cinco centavos'
1416
+ >>> convert_real_to_text("invalid")
1417
+ None
1418
+ ```
1419
+
1420
+ ## Natureza Jurídica
1421
+
1422
+ ### is_valid_legal_nature
1423
+
1424
+ Valida se o código informado existe na tabela oficial. Aceita `NNNN` ou `NNN-N`.
1425
+ O valor é **normalizado** antes da checagem: remove espaços, mantém apenas dígitos e aceita hífen entre o 3º e 4º dígitos.
1426
+
1427
+ **Argumentos**
1428
+ - `code (str)`: Código de 4 dígitos (ex.: `"2062"` ou `"206-2"`)
1429
+
1430
+ **Retorna**
1431
+ - `bool`: `True` se existir na tabela, `False` caso contrário.
1432
+
1433
+ **Exemplo**
1434
+ ```python
1435
+ >>> from brutils import legal_nature
1436
+ >>> legal_nature.is_valid("2062")
1437
+ True
1438
+ >>> legal_nature.is_valid("206-2")
1439
+ True
1440
+ >>> legal_nature.is_valid("9999")
1441
+ False
1442
+ ```
1443
+
1444
+ ### get_legal_nature_description
1445
+
1446
+ Retorna a **descrição oficial** do código de Natureza Jurídica. Aceita `NNNN` ou `NNN-N`. Aplica a mesma normalização do `is_valid`.
1447
+
1448
+ **Argumentos**
1449
+
1450
+ * `code (str)`: Código de 4 dígitos
1451
+
1452
+ **Retorna**
1453
+
1454
+ * `str | None`: Descrição correspondente ou `None` se o código for inválido ou inexistente.
1455
+
1456
+ **Exemplo**
1457
+
1458
+ ```python
1459
+ >>> from brutils import legal_nature
1460
+ >>> legal_nature.get_description("2062")
1461
+ 'Sociedade Empresária Limitada'
1462
+ >>> legal_nature.get_description("101-5")
1463
+ 'Órgão Público do Poder Executivo Federal'
1464
+ >>> legal_nature.get_description("0000")
1465
+ None
1466
+ ```
1467
+
1468
+ ### list_all_legal_nature
1469
+
1470
+ Retorna uma cópia do dicionário completo `{codigo: descricao}`.
1471
+
1472
+ **Retorna**
1473
+
1474
+ * `dict[str, str]`: Mapeamento de todos os códigos para suas descrições.
1475
+
1476
+ **Exemplo**
1477
+
1478
+ ```python
1479
+ >>> from brutils import legal_nature
1480
+ >>> data = legal_nature.list_all()
1481
+ >>> len(data) > 0
1482
+ True
1483
+ >>> data["2062"]
1484
+ 'Sociedade Empresária Limitada'
1485
+ ```
1486
+
1487
+ ## RENAVAM
1488
+
1489
+ ### is_valid_renavam
1490
+
1491
+ Valida se os dígitos de verificação do RENAVAM fornecido
1492
+ correspondem aos seus 10 dígitos iniciais. Esta função não verifica a existência do veículo;
1493
+ ela apenas valida o formato da string e o dígito verificador.
1494
+
1495
+ Argumentos:
1496
+
1497
+ - renavam (str): O RENAVAM a ser validado, uma string de 11 dígitos.
1498
+
1499
+ Retorna:
1500
+
1501
+ - bool: Verdadeiro se o RENAVAM for válido
1502
+ Falso caso contrário.
1503
+
1504
+ Exemplo:
1505
+
1506
+ ```python
1507
+ >>> from brutils import is_valid_renavam
1508
+ >>> is_valid_renavam("86769597308")
1509
+ True
1510
+ >>> is_valid_renavam("12345678901")
1511
+ False
1512
+ ```
1513
+
1514
+ ## Passaporte
1515
+
1516
+ ### is_valid_passport
1517
+
1518
+ Verifica se um número de passaporte brasileiro é válido.
1519
+
1520
+ Para ser considerado válido, a entrada deve ser uma string contendo exatamente dois caracteres alfabéticos seguidos de exatamente seis dígitos numéricos.
1521
+
1522
+ Esta função não verifica se a entrada é um número de passaporte real, pois não existem dígitos verificadores para o passaporte brasileiro.
1523
+
1524
+ Argumentos:
1525
+ - passport (str): A string contendo o número do passaporte a ser verificado.
1526
+
1527
+ Retorna:
1528
+ - bool: True se o número do passaporte for válido (2 letras seguidas de 6 dígitos). False caso contrário.
1529
+
1530
+ Exemplo:
1531
+ ```python
1532
+ >>> from brutils import is_valid_passport
1533
+ >>> is_valid_passport("Ab123456")
1534
+ True
1535
+ >>> is_valid_passport("12345678")
1536
+ False
1537
+ >>> is_valid_passport("DC-221345")
1538
+ False
1539
+ ```
1540
+ ### format_passport
1541
+
1542
+ Formata um número de passaporte brasileiro para exibição.
1543
+
1544
+ Esta função recebe uma string representando um número de passaporte válido e o retorna formatado (maiúsculas, sem símbolos).
1545
+
1546
+ Argumentos:
1547
+ - passport (str | None): Um número de passaporte brasileiro (minúsculas ou maiúsculas, possivelmente incluindo símbolos)
1548
+
1549
+ Retorna:
1550
+ - str: O número do passaporte formatado (maiúsculas, sem símbolos) ou None se a entrada for inválida
1551
+
1552
+ Exemplo:
1553
+ ```python
1554
+ >>> from brutils import format_passport
1555
+ >>> format_passport("Ab123456")
1556
+ AB123456
1557
+ >>> format_passport("Ab-123456")
1558
+ AB123456
1559
+ >>> format_passport("111111")
1560
+ None
1561
+ ```
1562
+ ### remove_symbols_passport
1563
+
1564
+ Remove símbolos ('-', '.' e espaços em branco) de um número de passaporte.
1565
+
1566
+ Esta função recebe uma string com um número de passaporte como entrada e remove todas as ocorrências dos caracteres '.', '-' e espaço em branco.
1567
+
1568
+ Argumentos:
1569
+ - passport (str): A string contendo um número de passaporte
1570
+
1571
+ Retorna:
1572
+ - str: O número do passaporte com hífens (-), pontos (.) e espaços em branco ( ) removidos.
1573
+
1574
+ Exemplo:
1575
+ ```python
1576
+ >>> from brutils import remove_symbols_passport
1577
+ >>> remove_symbols_passport("Ab123456")
1578
+ Ab123456
1579
+ >>> remove_symbols_passport("Ab-123456")
1580
+ Ab123456
1581
+ >>> remove_symbols_passport("Ab -. 123456")
1582
+ Ab123456
1583
+ ```
1584
+ ### generate_passport
1585
+
1586
+ Gera uma string com um número de passaporte brasileiro válido aleatório.
1587
+
1588
+ Esta função gera uma string com um número de passaporte brasileiro aleatório.
1589
+
1590
+ Retorna:
1591
+ - str: Uma string com um número de passaporte válido aleatório.
1592
+
1593
+ Exemplo:
1594
+ ```python
1595
+ >>> from brutils import generate_passport
1596
+ >>> generate_passport()
1597
+ "RY393097"
1598
+ >>> generate_passport()
1599
+ "ZS840088"
1600
+ ```
1115
1601
 
1116
1602
  # Novos Utilitários e Reportar Bugs
1117
1603
 
@@ -1144,3 +1630,11 @@ Vamos construir juntos! 🚀🚀
1144
1630
  [github-issues-doc]: https://docs.github.com/pt/issues/tracking-your-work-with-issues/creating-an-issue
1145
1631
  [github-issues]: https://github.com/brazilian-utils/brutils-python/issues
1146
1632
 
1633
+ ## ❤️ Quem já Contribuiu
1634
+
1635
+ <a href="https://github.com/brazilian-utils/brutils-python/graphs/contributors">
1636
+ <img src="https://contrib.rocks/image?repo=brazilian-utils/brutils-python" />
1637
+ </a></br></br>
1638
+
1639
+ _Feito por [contrib.rocks](https://contrib.rocks)._
1640
+