Solved

Social Security number validation with JQuery

Posted on 2011-09-07
8
853 Views
Last Modified: 2013-11-20
Hi, I need to add a method to the JQuery validation plugin. I have this piece of javascript code that I want to add into my JQuery validation. How do I do that?

 
<html>
<head>
<title>Check Norwegian NIN</title>
  <script type="text/javascript">
function checkNIN(o) {
	var nin = o.value;
	if (nin.length != 11) {
		return "must be 11 chars";
	}
	var cc0 = '0'.charAt(0);
	var cw1 = [3, 7, 6, 1, 8, 9, 4, 5, 2];
	var cw2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
	// check digit 1
	var ws1 = 0;
	for (var n=0; n<cw1.length; n++) {
		ws1 += cw1[n] * (nin.charAt(n) - cc0);
	}
	var cd1 = 11 - (ws1 % 11);
	if (cd1 == 10) {
		return "invalid number, check digit 1 would be 10";
	}
	if (cd1 == 11) {
		cd1 = 0;
	}
	if (nin.charAt(cw1.length) - cc0 != cd1) {
		return "check digit 1 should be " + cd1;
	}
	// check digit 2
	var ws2 = 0;
	for (var n=0; n<cw2.length; n++) {
		ws2 += cw2[n] * (nin.charAt(n) - cc0);
	}
	var cd2 = 11 - (ws2 % 11);
	if (cd2 == 10) { // assuming this is needed
		return "invalid number, check digit 2 would be 10";
	}
	if (cd2 == 11) {
		cd2 = 0;
	}
	if (nin.charAt(cw2.length) - cc0 != cd2) {
		return "check digit 2 should be " + cd2;
	}

	// check age
	var century = -1, numyear = Number(nin.substr(4,2)), numindiv = Number(nin.substr(6,3));
	if (numindiv > 499) {
		if (numindiv < 750 && numyear >= 54) {
			century = 18;
		} else if (numyear < 40) {
			century = 20;
		} else if (numindiv = 900 && numyear >= 40) { // special cases
			century = 19;
		}
	} else {
		century = 19;
	}

	if (century == -1) {
		return "invalid combination of year and individual number";
	}

	var check18 = new Date(century * 100 + numyear + 18, Number(nin.substr(2,2))-1, Number(nin.substr(0,2)), 0, 0, 0, 0);
	alert (check18);
	if (check18 > new Date()) {
		return "Sorry, you have to be at least 18 to get registered";
	}

	return "ok!";
} 
</script>
</head>
<body>
<form>
<input type="text" name="nin" maxlength="11" size="11" onkeyup="document.forms[0]['st'].value = checkNIN(this)">
<br><br>
<input type="text" name="st" readonly size="30">
</form>
</body>
</html> 

Open in new window

0
Comment
Question by:Deenee
  • 3
  • 2
8 Comments
 
LVL 40

Expert Comment

by:gurvinder372
Comment Utility
check this code

<html>
<head>
<title>Check Norwegian NIN</title>
	<script src="jquery-1.4.2.min.js"></script>

	<script type="text/javascript">
		$(document).ready(function(){
			$("#nin").bind("keyup", function(){
				$("#st").val($(this).checkNIN());	
			});  
		});
		(function($){
			$.fn.checkNIN = function() 
			{	 
				var nin = $(this).val();
				if (nin.length != 11) {
					return "must be 11 chars";
				}
				var cc0 = '0'.charAt(0);
				var cw1 = [3, 7, 6, 1, 8, 9, 4, 5, 2];
				var cw2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
				// check digit 1
				var ws1 = 0;
				for (var n=0; n<cw1.length; n++) {
					ws1 += cw1[n] * (nin.charAt(n) - cc0);
				}
				var cd1 = 11 - (ws1 % 11);
				if (cd1 == 10) {
					return "invalid number, check digit 1 would be 10";
				}
				if (cd1 == 11) {
					cd1 = 0;
				}
				if (nin.charAt(cw1.length) - cc0 != cd1) {
					return "check digit 1 should be " + cd1;
				}
				// check digit 2
				var ws2 = 0;
				for (var n=0; n<cw2.length; n++) {
					ws2 += cw2[n] * (nin.charAt(n) - cc0);
				}
				var cd2 = 11 - (ws2 % 11);
				if (cd2 == 10) { // assuming this is needed
					return "invalid number, check digit 2 would be 10";
				}
				if (cd2 == 11) {
					cd2 = 0;
				}
				if (nin.charAt(cw2.length) - cc0 != cd2) {
					return "check digit 2 should be " + cd2;
				}

				// check age
				var century = -1, numyear = Number(nin.substr(4,2)), numindiv = Number(nin.substr(6,3));
				if (numindiv > 499) {
					if (numindiv < 750 && numyear >= 54) {
						century = 18;
					} else if (numyear < 40) {
						century = 20;
					} else if (numindiv = 900 && numyear >= 40) { // special cases
						century = 19;
					}
				} else {
					century = 19;
				}

				if (century == -1) {
					return "invalid combination of year and individual number";
				}

				var check18 = new Date(century * 100 + numyear + 18, Number(nin.substr(2,2))-1, Number(nin.substr(0,2)), 0, 0, 0, 0);
				alert (check18);
				if (check18 > new Date()) {
					return "Sorry, you have to be at least 18 to get registered";
				}

				return "ok!";
			};
		})( jQuery );
	</script>
</head>
<body>
<form>
<input type="text" name="nin" id="nin" maxlength="11" size="11">
<br><br>
<input type="text" id="st" name="st" readonly size="30">
</form>
</body>
</html>

Open in new window

0
 
LVL 40

Expert Comment

by:gurvinder372
Comment Utility
line number 12-79 can be placed in a separate file and include that as plugin
0
 

Author Comment

by:Deenee
Comment Utility
Hi. I want the code to work together with the validation plugin, because I have a range og other input elements in the form that already use the Jquery validator. I thought I would write it this way, and include the "jQuery.validator.addMethod"  sentence:
 $ (document). ready (function () {
         $ ("# formid"). validate ();
     });

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:Deenee
Comment Utility
Sorry, I did not see your first post..
0
 
LVL 40

Expert Comment

by:gurvinder372
Comment Utility
For that you don't need plugin, just create a addMethod like this
http://stackoverflow.com/questions/241145/jquery-validate-plugin-how-to-create-a-simple-custom-rule

0
 
LVL 17

Accepted Solution

by:
sonawanekiran earned 500 total points
Comment Utility
You don't need to do anything. You just need to call your function from jquery ready function.
See below link to test below code.
http://jsfiddle.net/jGvSz/
<!DOCTYPE html>
<html>
<head>
<title>Kiran Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(){
  $("#nin").keyup(function(){
    $("#st").val(checkNIN(this));
  });
});

function checkNIN(o) {
  var nin = o.value;
  if (nin.length != 11) {
    return "must be 11 chars";
  }
  var cc0 = '0'.charAt(0);
  var cw1 = [3, 7, 6, 1, 8, 9, 4, 5, 2];
  var cw2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
  // check digit 1
  var ws1 = 0;
  for (var n=0; n<cw1.length; n++) {
    ws1 += cw1[n] * (nin.charAt(n) - cc0);
  }
  var cd1 = 11 - (ws1 % 11);
  if (cd1 == 10) {
    return "invalid number, check digit 1 would be 10";
  }
  if (cd1 == 11) {
    cd1 = 0;
  }
  if (nin.charAt(cw1.length) - cc0 != cd1) {
    return "check digit 1 should be " + cd1;
  }
  // check digit 2
  var ws2 = 0;
  for (var n=0; n<cw2.length; n++) {
    ws2 += cw2[n] * (nin.charAt(n) - cc0);
  }
  var cd2 = 11 - (ws2 % 11);
  if (cd2 == 10) { // assuming this is needed
    return "invalid number, check digit 2 would be 10";
  }
  if (cd2 == 11) {
    cd2 = 0;
  }
  if (nin.charAt(cw2.length) - cc0 != cd2) {
    return "check digit 2 should be " + cd2;
  }

  // check age
  var century = -1, numyear = Number(nin.substr(4,2)), numindiv = Number(nin.substr(6,3));
  if (numindiv > 499) {
    if (numindiv < 750 && numyear >= 54) {
      century = 18;
    } else if (numyear < 40) {
      century = 20;
    } else if (numindiv = 900 && numyear >= 40) { // special cases
      century = 19;
    }
  } else {
    century = 19;
  }

  if (century == -1) {
    return "invalid combination of year and individual number";
  }

  var check18 = new Date(century * 100 + numyear + 18, Number(nin.substr(2,2))-1, Number(nin.substr(0,2)), 0, 0, 0, 0);
  alert (check18);
  if (check18 > new Date()) {
    return "Sorry, you have to be at least 18 to get registered";
  }

  return "ok!";
} 

</script>
</head>
<body>
  <form>
<input type="text" name="nin" id="nin" maxlength="11" size="11">
<br><br>
<input type="text" name="st" id="st" readonly size="30">
</form>
</body>
</html>

Open in new window

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Shoutout to Emily Plummer (http://www.experts-exchange.com/members/eplummer26.html) for giving me this article! She did most of it, I just finished it up and posted it for her :)    Introduction In a previous article (http://www.experts-exchang…
International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now