#18537 closed Bug (fixed)
Error in calculation of check digit in ARCUITField
| Reported by: | Owned by: | foxyNinja7 | |
|---|---|---|---|
| Component: | contrib.localflavor | Version: | 1.4 |
| Severity: | Normal | Keywords: | ARCUITField, localflavor.ar |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | yes | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
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)
Thanks,
Change History (9)
comment:1 by , 13 years ago
| Component: | Forms → contrib.localflavor |
|---|---|
| Easy pickings: | set |
| Needs tests: | set |
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 13 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 13 years ago
comment:5 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Local git branch for this change: https://github.com/kevinschaul/django