Greece T.R.N - Α.Φ.Μ Validation
T.R.N (Α.Φ.Μ) Validation Method based on jQuery
by Valentinos Galanos
July 26, 2016
HTML
<p>
Αυτός ο αλγόριθμος τσεκάρει αν ένα 9ψήφιο νούμερο μπορεί να είναι ΑΦΜ και όχι την ύπαρξή του ή όχι.</p>
<p>Είναι έλεγχος ορθότητας και όχι έλεγχος υπαρκτότητας.</p>
<p><small>Αν έχει δοθεί σε κάποιο φυσικό πρόσωπο ή εταιρία και είναι σε χρήση, μόνο η Εφορία το γνωρίζει και δεν βρίσκεται μέσω αλγορίθμου αυτό.</small></p>
<input type="text" placeholder="Α.Φ.Μ." data-validate-afm>
CSS
input,
input:focus
{
padding: 8px 4px;
border: solid 1px #aaa;
width: 300px;
color: #333;
border-radius: 4px;
transition: all 1s ease;
}
input.valid-afm {
border: 1px solid green;
}
input.invalid-afm {
border: 1px solid red;
}
JavaScript
(function(w, undefined) {
const $ = w.jQuery;
const $afm_input = $('[data-validate-afm]');
$afm_input.on('change', function(ev) {
const value = $(this).val();
if(value.length == 9 && value.match(/\d+/)) {
// First Remove Last Digit
const last_digit = value.substr(value.length - 1, 1);
// Reverse The Less Digits
const less_digits = value
.substr(0, value.length - 1).split('').reverse().join('');
var index = 1, digit, multiple=0, sum=0, mod1, mod2;
// Calculate The Sum
for(var i in less_digits) {
digit = less_digits[i];
multiple = digit * w.Math.pow(2, index);
sum += multiple;
index++;
}
// Modulus with 11
mod1 = sum % 11;
// Modulus with 10
mod2 = mod1 % 10;
w.console.log('AFM Validation',
last_digit, less_digits, sum, mod1, mod2
);
if(mod2 == last_digit) {
$(this)
.removeClass('invalid-afm')
.addClass('valid-afm');
} else {
$(this)
.removeClass('valid-afm')
.addClass('invalid-afm');
}
} else {
$(this).removeClass('invalid-afm').removeClass('valid-afm').val(null);
}
});
})(window);