JSFiddle - React, Tailwind, and code Playground

by st3fan

HTML

<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<input type="text" value="19940522-1234" />

JavaScript

function validatePNum(sPNum) {
    
    var numbers = sPNum.match(/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/);
    var checkSum = 0;
    var d = new Date();
    
    if (!isDate("19" + sPNum.substring(0, 2), sPNum.substring(2, 4), sPNum.substring(4, 6))) {
        return false;
    }
    
    if (numbers == null) { return false; }
    
    var n;
    for (var i = 1; i <= 10; i++) {
        n = parseInt(numbers[i]);
        if (i % 2 == 0) {
            checkSum += n;
        } else {
            checkSum += (n * 2) % 9 + Math.floor(n / 9) * 9;
        }
    }
    
    if (checkSum % 10 == 0) { return true; }
    
    return false;
}

function getYear(y) { return (y < 1000) ? y + 1900 : y; }

function isDate(year, month, day) {
    
    month = month - 1; // 0-11 in JavaScript
    var tmpDate = new Date(year, month, day);
    
    if ((getYear(tmpDate.getYear()) == year) &&
        (month == tmpDate.getMonth()) &&
        (day == tmpDate.getDate())) {
        return true;
    } else {
        return false;
    }
}

var validators = {};
validators.date = function(year, month, day) {
    month = month - 1; // 0-11 in JavaScript
    var date = new Date(year, month, day);
    
    return ((getYear(date.getYear()) == year) &&
        (month == date.getMonth()) &&
        (day == date.getDate()));
};
validators.ssn = function(input) {
    var numbers = input.match(/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/);
    var checkSum = 0;
    var d = new Date();
    
    var year = '19' + input.substring(0, 2), // TEMP
        month = input.substring(2, 4),
        day = input.substring(4, 6);
    
    if (!validators.date(year, month, day))
        return false;
    
    if (numbers == null) { return false; }
    
    var n;
    for (var i = 1; i <= 10; i++) {
        n = parseInt(numbers[i]);
        if (i % 2 == 0) {
            checkSum += n;
        } else {
            checkSum += (n * 2) % 9 + Math.floor(n / 9) * 9;
        }
    }
    
    if (checkSum % 10 == 0) {...