﻿function ValidateSSNLimit(kennitala) {
    var isvalid;
    if (kennitala.length == 10) {
        var today = new Date();
        var age = new Date();

        var year = kennitala.charAt(9);
        if (year == 8)
            year = 1800;
        else if (year == 9)
            year = 1900;
        else if (year == 0)
            year = 2000;

        year += parseInt(kennitala.charAt(4)) * 10 + parseInt(kennitala.charAt(5));

        var month = parseInt(kennitala.charAt(2)) * 10 + parseInt(kennitala.charAt(3));
        var day = parseInt(kennitala.charAt(0)) * 10 + parseInt(kennitala.charAt(1));

        //Company SSNs have the month as 32+
        if (day > 31) {
            isvalid = true;
        }
        else {
            age.setFullYear(year + 18, month - 1, day); //jan er 0, feb er 1 osfrv

            isvalid = today >= age;
        }
    }
    else {
        isvalid = false;
    }
    return isvalid;
}

function GetMagicNumber(kennitala) {
    var sum = 0;
    var multiplier = new Array(3, 2, 7, 6, 5, 4, 3, 2);

    for (var index = 0; index < 8; index++)
    { sum += parseInt(kennitala.charAt(index)) * multiplier[index]; }
    var remainder = sum % 11;
    var magicnumber = 11 - remainder;

    if (magicnumber == 11)
        magicnumber = 0;
    return magicnumber;
}

function ValidateSSN(kennitala) {
    var isvalid;
    if (kennitala.length == 10) {
        if (parseInt(kennitala.charAt(8)) == GetMagicNumber(kennitala) && ('8' == kennitala.charAt(9) || '9' == kennitala.charAt(9) || '0' == kennitala.charAt(9)))
            isvalid = true;
        else
            isvalid = false;
    }
    // if length < 10 then true because other checks stop if its to short
    // this only return false if length 10 snn is not older than 18
    else
        isvalid = false;

    return isvalid;
}
