Error in calculation of check digit in ARCUITField
|Reported by:||mmoya@…||Owned by:||foxyNinja7|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||yes||Patch needs improvement:||no|
There is a bug in the calculation of check digit on forms.py from django.contrib.localflavor.ar.
When using ARCUITField and enter a valid CUIT terminated (that is, check digit) in 0 or 9, the clean method raise a Validation error message.
To replicate the bug, just enter a valid cuit number with the format XX-XXXXXXXX-0, and you will see the error "Invalid CUIT".
The problem is in the _calc_cd(self, cuit) method, that not take care of this two special cases. More info in http://es.wikipedia.org/wiki/C%C3%B3digo_%C3%9Anico_de_Identificaci%C3%B3n_Tributaria
A quick fix for this could be:
def _calc_cd(self, cuit): mults = (5, 4, 3, 2, 7, 6, 5, 4, 3, 2) tmp = sum([m * int(cuit[idx]) for idx, m in enumerate(mults)]) aux_cd = 11 - tmp % 11 if aux_cd == 11: aux_cd = 0 elif aux_cd == 10: aux_cd = 9 return str(aux_cd)
Change History (9)
comment:1 Changed 2 years ago by claudep
- Component changed from Forms to contrib.localflavor
- Easy pickings set
- Needs documentation unset
- Needs tests set
- Patch needs improvement unset
- Triage Stage changed from Unreviewed to Accepted
comment:2 Changed 2 years ago by foxyNinja7
- Owner changed from nobody to foxyNinja7
- Status changed from new to assigned
comment:5 Changed 2 years ago by Claude Paroz <claude@…>
- Resolution set to fixed
- Status changed from assigned to closed