Skip to content

Instantly share code, notes, and snippets.

@grimurd
Created February 2, 2015 12:15
Show Gist options
  • Save grimurd/71fa65c892454edcde96 to your computer and use it in GitHub Desktop.
Save grimurd/71fa65c892454edcde96 to your computer and use it in GitHub Desktop.
AngularJS Vartölu Directive
angular.module('moduleName')
.directive('ssn', function () {
return {
restrict: 'A',
require: 'ngModel',
scope: {
leyfaUndirAtjan: '=leyfaUndirAtjan',
leyfaFyrirtaeki: '=leyfaFyrirtaeki'
},
link: function (scope, elem, attr, ctrl) {
var parseSSN = function (value) {
value = value !== undefined && value !== '' ? value : false;
if (!value) return false;
value = value.toString().replace(/[^\d.]/g, '');
if (value.length < 10) return false;
return value;
}
var verifySSN = function (value) {
if (!(value = parseSSN(value))) {
return false;
}
var sum = 0, vartala = 0,
multiplies = [3, 2, 7, 6, 5, 4, 3, 2];
for (var i = 0; i < multiplies.length; i++) {
sum += value[i] * multiplies[i];
}
vartala = (11 - (sum % 11));
vartala = vartala === 11 ? 0 : vartala;
var valid = vartala === parseInt(value[8], 10);
return valid;
};
var convertYear = function(year) {
if (year.match( new RegExp( "^[01]{1}", "" ))) {
return( "20" + year );
} else {
return( parseInt("19" + year));
}
};
var yfirAtjan = function(kennitala) {
var re = /(\d{2})(\d{2})(\d{2})/;
var splitDate = kennitala.match(re);
var y = convertYear(splitDate[3]),
m = splitDate[2],
d = splitDate[1];
var ageDiff = Date.now() - new Date(y, m-1, d).getTime();
var ageDate = new Date(ageDiff);
return Math.abs(ageDate.getUTCFullYear() - 1970) > 17
};
var fyrirtaeki = function(kennitala) {
var dags = parseInt(kennitala.substr(0, 2));
if(dags > 31) {
return true;
}
return false;
};
ctrl.$parsers.unshift(function(value) {
if(value) {
var valid = verifySSN(value);
if(scope.leyfaUndirAtjan === false) {
if(fyrirtaeki(value) === false) {
valid = valid && yfirAtjan(value);
}
}
if(scope.leyfaFyrirtaeki === false) {
valid = valid && !fyrirtaeki(value);
}
ctrl.$setValidity('vartolutekk', valid);
}
return valid ? value : undefined
});
}
};
});
@grimurd
Copy link
Author

grimurd commented Feb 2, 2015

Til að banna fyrirtækjakennitölur er hægt að gera leyfa-fyrirtaeki="false" á elementinu. Til að banna undir 18 ára er hægt að gera leyfa-undir-atjan="false" á elementinu.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment