Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 205e0d3

Browse files
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

Lines changed: 12 additions & 10 deletions
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__"anddebugMode==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

Lines changed: 41 additions & 23 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /