Skip to content

Instantly share code, notes, and snippets.

@edgabaldi
Created October 22, 2015 02:39
Show Gist options
  • Select an option

  • Save edgabaldi/a77089cd62922ac6f48d to your computer and use it in GitHub Desktop.

Select an option

Save edgabaldi/a77089cd62922ac6f48d to your computer and use it in GitHub Desktop.
Generate Randon valid CPF (unfinished)
class Randomize(object):
def _get_multiplier(self):
if not hasattr(self, 'multiplier') or \
self.multiplier == None:
self.multiplier = 2
else:
if self.multiplier == 9:
self.multiplier = 2
else:
self.multiplier += 1
return self.multiplier
def _generate_dv1_cpf(self, number):
"""
d1 = n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1 = 11 - ( mod(d1,11) );
"""
total = 0
number_str = str(number)
reversed = number_str[::-1]
for char in reversed:
multiplier = self._get_multiplier()
total += int(char) * multiplier
return 11 - ( total % 11 )
def _generate_dv2_cpf(self, number):
total = 0
number_str = str(number)
for char in reversed:
multiplier = self._get_multiplier()
total += int(char) * multiplier
return 11 - ( total % 11 )
@classmethod
def cpf(self):
output = ''
while(len(output) < 9):
output += str(random.randint(0,9))
return output
from unittest import TestCase
from leilao.management.commands.tcc import Randomize
class RandomizeTestCase(TestCase):
def test_randomize_cpf(self):
value = Randomize.cpf()
self.assertEqual(len(value), 9)
for digit in value:
digit = int(digit)
self.assertTrue(digit >= 0, digit)
self.assertTrue(digit <= 9, digit)
def test_generate_dv1_cpf(self):
#316.068.165-35 // 5
randomize = Randomize()
dv1 = randomize._generate_dv1_cpf('316068165')
self.assertEqual(dv1, 5)
def test_generate_dv2_cpf(self):
#316.068.165-35 // 3
randomize = Randomize()
dv1 = randomize._generate_dv1_cpf('316068165')
self.assertEqual(dv1, 3)
def test_get_multiplier(self):
params = [None, 2, 3, 4, 5, 6, 7, 8, 9]
answers = [2, 3, 4, 5, 6, 7, 8, 9, 2]
for k, v in zip(params, answers):
self._assert_get_multiplier(k, v)
def _assert_get_multiplier(self, param, answer):
randomize = Randomize()
randomize.multiplier = param
multiplier = randomize._get_multiplier()
self.assertEqual(answer, multiplier)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment