angular-input-types
Version:
AngularJS directives used on form inputs. Makes it easy for the users to input the correct information using autocomplete and validation.
93 lines (75 loc) • 2.27 kB
JavaScript
angular.module('inputTypes')
.factory('validate', function () {
function number(value) {
return !isNaN(value);
}
function personnummer(value) {
return value.length == 13 && dateOrSamordningsnummer(value) && luhnAlgoritm(value);
}
function orgnr(value) {
if(value.length != 11 && value.length != 13) {
return false;
}
if (!value.match(/^(\d{2})?(\d{2})(\d{2})(\d{2})\-(\d{4})$/)) {
return false;
}
if(parseInt(RegExp.$3) < 20) {
return personnummer(value.length == 11 ? '20' + value : value);
}
if(RegExp.$1 != '' && RegExp.$1 != 16) {
return false;
}
return luhnAlgoritm(value);
}
function time(value) {
if(value.length != 5) {
return false;
}
if(value.charAt(2) !== ':') {
return false;
}
var hours = value.substring(0, 2);
if(hours < 0 || hours > 23) {
return false;
}
var mins = value.substring(3, 5);
if(mins < 0 || mins > 59) {
return false;
}
return true;
}
function dateOrSamordningsnummer(value) {
if (!value.match(/^(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) {
return false;
}
var date = new Date(RegExp.$1, RegExp.$2 - 1, RegExp.$3 < 61 ? RegExp.$3 : 1);
if(RegExp.$1 < 1840 || date.getFullYear() != RegExp.$1 || date.getMonth() != RegExp.$2 - 1 || (date.getDate() != RegExp.$3 && (RegExp.$3 < 61 || RegExp.$3 > 91))) {
return false;
}
return true;
}
function luhnAlgoritm(value) {
value = value.replace('-', '');
if(value.length == 12) {
value = value.substring(2);
}
var sum = 0;
for (var i = 0; i < 10; i++) {
var digit = parseInt(value.charAt(i));
if (i % 2 === 0) {
digit *= 2;
}
if (digit > 9) {
digit -= 9;
}
sum += digit;
}
return (sum % 10) === 0;
}
return {
number: number,
personnummer: personnummer,
orgnr: orgnr,
time: time
}
});