Skip to content

Commit 205e0d3

Browse files
committed
CPF checker and CPF generator tweaks
1 parent cea9f77 commit 205e0d3

File tree

2 files changed

+53
-33
lines changed

2 files changed

+53
-33
lines changed

Problem Solving Scripts/CPF_Checker.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
import re
6969

7070
# WARNING: Disable in production!
71-
debugMode = False
71+
debugMode = True
7272

7373

7474
def logThis(message):
@@ -91,14 +91,17 @@ def __init__(self, cpf: str):
9191
self.validateCPF(cpf)
9292

9393
validCPF = None
94-
partiallyValidation = None
94+
partiallyValidation = False
9595

9696
@staticmethod
9797
# Validates a CPF number with the easy way.
9898
def validateCPF(userCPF: str):
9999
"""
100100
This function is used to validate and clean the CPF number.
101101
"""
102+
103+
global partiallyValidation
104+
102105
# regular expression to remove any non-numeric characters, spaces, dots or dashes.
103106
userCPF = re.sub("[^0-9]", "", userCPF)
104107
logThis(userCPF)
@@ -117,7 +120,6 @@ def validateCPF(userCPF: str):
117120
sumOfDigits = str(sumOfDigits)
118121

119122
if sumOfDigits[0] == sumOfDigits[1]:
120-
logThis("CPF partially valid.")
121123
partiallyValidation = True
122124

123125
# Get first nine digits from userCPF
@@ -144,20 +146,20 @@ def validateCPF(userCPF: str):
144146
mergeRes = str(userCPF[:9]) + str(restSum) + str(restSumSec)
145147
logThis(f"Merged result: {mergeRes}")
146148

147-
if mergeRes == userCPF and partiallyValidation == True:
148-
validCPF = True
149-
logThis(f"CPF is valid. {validCPF}")
149+
if mergeRes == userCPF:
150+
if partiallyValidation == True:
151+
logThis("CPF fully valid.")
152+
return True
150153
return True
151154
else:
152-
validCPF = False
153-
logThis(f"CPF is NOT valid. {validCPF}")
155+
logThis(f"CPF is NOT valid.")
154156
return False
155157

156158

157-
if __name__ == "__main__":
159+
if __name__ == "__main__" and debugMode == True:
158160
"""
159161
This function is used to run the program.
160162
"""
161163
if debugMode:
162-
sampleCPF = "510088499011"
164+
sampleCPF = "113.314.390-35"
163165
CPF_Validator_N.validateCPF(sampleCPF)

Problem Solving Scripts/CPF_Generator.py

+41-23
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,32 @@ def logThis(message):
2727
print(message)
2828

2929

30+
def getDigits(cpf: str):
31+
"""
32+
This function is used to generate the digits.
33+
"""
34+
lenQty = len(cpf) + 1
35+
multiOpr = []
36+
cpfINT = int(cpf)
37+
38+
for cpfIndex, multiplyNum in enumerate(range(lenQty, 1)):
39+
multiOpr.append(int(cpfINT[cpfIndex]) * multiplyNum)
40+
print(f"{cpf[cpfIndex]} * {multiplyNum} = {multiOpr[cpfIndex]}")
41+
42+
sumRes = sum(multiOpr)
43+
finalRes = 11 - (sumRes % 11)
44+
45+
logThis(f"Final result before: {finalRes}")
46+
47+
if finalRes > 9:
48+
finalRes = 0
49+
else:
50+
finalRes = finalRes
51+
52+
logThis(f"Final result: {finalRes}")
53+
return finalRes
54+
55+
3056
class CPF_GEN:
3157
"""
3258
This class is used to generate CPF numbers.
@@ -40,17 +66,11 @@ def __init__(self):
4066
"""
4167
self.generateCPF()
4268

43-
def getDigits(cpf):
44-
lenQty = len(cpf) + 1
45-
for cpfIndex, multiplyNum in enumerate(range(lenQty, 1)):
46-
cpf = cpf + str(multiplyNum * int(cpf[cpfIndex]))
47-
return int(cpf) % 11
48-
4969
def getDigitOne(cpf: str) -> int:
50-
return CPF_GEN.getDigits(cpf[:9])
70+
return getDigits(cpf[:9])
5171

5272
def getDigitTwo(cpf: str) -> int:
53-
return CPF_GEN.getDigits(cpf[:10])
73+
return getDigits(cpf[:10])
5474

5575
@staticmethod
5676
def generateCPF():
@@ -59,34 +79,32 @@ def generateCPF():
5979
"""
6080

6181
# Start with random sequence between 0 and 9
62-
nineDigits= "".join([str(random.randint(0, 9)) for x in range(9)])
82+
nineDigits = "".join([str(random.randint(0, 9)) for x in range(9)])
6383
digitOne = CPF_GEN.getDigitOne(nineDigits)
6484
digitTwo = CPF_GEN.getDigitTwo(f"{nineDigits}{digitOne}")
65-
genCPF = f"{nineDigits}{digitOne}{digitTwo}"
66-
85+
genCPF = f"{nineDigits}{str(digitOne)}{str(digitTwo)}"
6786
formatGenCPF = f"{genCPF[0:3]}.{genCPF[3:6]}.{genCPF[6:9]}-{genCPF[9:11]}"
68-
logThis(f"Test formatted: {formatGenCPF}")
69-
7087
return formatGenCPF
7188

7289
def checkCPF():
73-
if debugMode:
74-
forceCPF = "113.314.390-35"
75-
76-
while isThisValid.validateCPF(str(CPF_GEN.generateCPF())) != True:
77-
CPF_GEN.generateCPF()
78-
logThis("CPF is invalid, generating another one...")
79-
# logThis(f"Test Import: {isThisValid.validateCPF(str(CPF_GEN.generateCPF()))}")
80-
return isThisValid.validateCPF(str(CPF_GEN.generateCPF()))
90+
91+
if (
92+
isThisValid.validateCPF(CPF_GEN.generateCPF()) != True
93+
and isThisValid.validateCPF(CPF_GEN.generateCPF()) is not None
94+
):
95+
# CPF_GEN.generateCPF()
96+
logThis(
97+
f"CPF is invalid, generating another one... {CPF_GEN.generateCPF()}"
98+
)
99+
return None
81100
else:
82-
logThis("CPF is valid!")
101+
logThis(f"CPF is valid! {CPF_GEN.generateCPF()}")
83102
return CPF_GEN.generateCPF()
84103

85104

86105
if __name__ == "__main__":
87106
"""
88107
This function is used to run the program.
89108
"""
90-
CPF_GEN.generateCPF()
91109
# CPF_GEN.checkCPF()
92110
logThis(CPF_GEN.checkCPF())

0 commit comments

Comments
 (0)