Advertisement
Guest User

Untitled

a guest
Dec 25th, 2014
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function SwedishSocialSecurityNumber(socialSecurityNumber){
  2.     var _isOver100 = false;
  3.     var _socialSecurityNumber = socialSecurityNumber;
  4.  
  5.  
  6.     if(!_hasTheRightPattern())
  7.         throw new Error('The SSN has to have the format YYMMDD-XXXX or YYMMDD+XXXX');
  8.  
  9.     var _year = parseInt(_socialSecurityNumber.substring(0,2));
  10.     var _month = parseInt(_socialSecurityNumber.substring(2,4));
  11.     var _day = parseInt(_socialSecurityNumber.substring(4,6));
  12.     var _code = parseInt(_socialSecurityNumber.substring(7,11));
  13.  
  14.     if(_socialSecurityNumber.substring(6, 7) == '+') _isOver100 = true;
  15.  
  16.     if(!_isDateValid(_getFullYear(), _month, _day))
  17.         throw new Error('The given date is not valid or is fictional');
  18.  
  19.     if(_getCheckSum() != _socialSecurityNumber.substring(10,11))
  20.         throw new Error("The control number is invalid");
  21.  
  22.     this.socialSecurityNumber = function() {
  23.         return _socialSecurityNumber;
  24.     };
  25.  
  26.     function _getFullYear(){
  27.         var currentYear = new Date().getFullYear();
  28.         var ret = 0;
  29.        
  30.         if(_year < 10){
  31.             ret = currentYear.toString().substring(0,2) + "0" + _year.toString();
  32.         } else {
  33.             ret = currentYear.toString().substring(0,2) +  _year.toString();
  34.         }
  35.  
  36.         if(_isOver100) return parseInt(ret) - 100;
  37.         if( parseInt(ret) > currentYear ) return parseInt(ret) - 100;
  38.  
  39.         return(parseInt(ret));
  40.     }
  41.  
  42.     function _getCheckSum(){
  43.         var variegated = 2;
  44.         var temp = 0;
  45.         var list = [];
  46.  
  47.         for(i = 0; i < _socialSecurityNumber.length - 1; i++){
  48.             if( i == 6) continue;
  49.  
  50.             temp = parseInt(_socialSecurityNumber[i]);
  51.             temp = temp * variegated;
  52.             tempStr = temp.toString();
  53.             for(j = 0; j < tempStr.length; j++) {
  54.                 list.push(parseInt(tempStr[j]));
  55.             }
  56.  
  57.             variegated = variegated == 2 ? 1 : 2;
  58.             temp = 0;
  59.         }
  60.  
  61.         var sum = 0;
  62.         for(i = 0; i < list.length; i++) sum = sum + list[i];
  63.  
  64.             return(10 - (sum % 10));
  65.     }
  66.  
  67.     function _hasTheRightPattern(){
  68.         var pattern = /^[0-9]{2}[0-1][0-9][0-3][0-9][-|+][0-9]{4}$/
  69.         return pattern.test(_socialSecurityNumber);
  70.     }
  71.  
  72.     function _isDateValid(){
  73.         var d = new Date(_getFullYear(), _month - 1, _day);
  74.         if(isNaN(d)) return false;
  75.  
  76.         var currentDate = new Date();
  77.         if(d > currentDate) return false;
  78.         if(d.getFullYear() == _getFullYear() && (d.getMonth() + 1) == _month && d.getDate() == _day) return true;
  79.         return false;
  80.     }
  81.  
  82.     this.getFullYear = function() {
  83.         return _getFullYear();
  84.     };
  85.    
  86.     this.isFemale = function() {
  87.         if((parseInt(this.socialSecurityNumber().substring(9, 10)) % 2) === 0) return true;
  88.         return false;
  89.     };
  90.  
  91.     this.isMale = function() {
  92.         return !this.isFemale();
  93.     };
  94.  
  95.     this.getYear = function() {
  96.         return _year;
  97.     };
  98.  
  99.     this.getMonth = function(){
  100.         return _month;
  101.     };
  102.  
  103.     this.getDay = function() {
  104.         return _day;
  105.     };
  106.  
  107.     this.getCode = function() {
  108.         return _code;
  109.     };
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement