def __init__(self, number, exp_mo, exp_yr, first_name=None, last_name=None, full_name=None, cvv=None, cc_type=None, strict=False): """ sets credit card info """ if full_name: self.full_name = full_name else: self.first_name = first_name self.last_name = last_name self.full_name = "{0.first_name} {0.last_name}".format(self) #everything else self.number = number self.exp_month = exp_mo self.exp_year = exp_yr self.exp_date = get_card_exp(self.exp_month, self.exp_year) self.card_type = get_card_type(self.number) self.verification_value = cvv if cvv else None self.strict = strict
def clean(self): """Validates the form""" super(CreditCardForm, self).clean() cleaned_data = self.cleaned_data number = cleaned_data.get('number') security_code = cleaned_data.get('security_code') exp_month = cleaned_data.get('exp_month') exp_year = cleaned_data.get('exp_year') if not self.is_valid(): raise forms.ValidationError("There was a problem processing your payment") cc_type = get_card_type(number) if not cc_type or not is_valid_cc(number): raise forms.ValidationError("Invalid credit card number") if not is_valid_cvv(security_code, cc_type): raise forms.ValidationError("Invalid security code") if not is_valid_exp(exp_month, exp_year): raise forms.ValidationError("Invalid expiracy date") return cleaned_data
def validate(self): """ validates expiration date & card number using util functions """ if not is_valid_cc(self.number): raise DataValidationError('The credit card number provided does not pass luhn validation') if not is_valid_exp(self.exp_month, self.exp_year): raise DataValidationError('The credit card expiration provided is not in the future') if self.strict: if not is_valid_cvv(self.verification_value, get_card_type(self.number)): raise DataValidationError('The credit card cvv is not valid') return True