Skip to content

Commit

Permalink
Additional: Add Brazillian CNH number (Carteira Nacional de Habilitac…
Browse files Browse the repository at this point in the history
…ao) (#2234)
  • Loading branch information
joaoissamu authored and Arkni committed Nov 5, 2018
1 parent e83a240 commit fcf782e
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
49 changes: 49 additions & 0 deletions src/additional/cnhBR.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Brazillian CNH number (Carteira Nacional de Habilitacao) is the License Driver number.
* CNH numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
*/
$.validator.addMethod( "cnhBR", function( value ) {

// Removing special characters from value
value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" );

// Checking value to have 11 digits only
if ( value.length !== 11 ) {
return false;
}

var sum = 0, dsc = 0, firstChar,
firstCN, secondCN, i, j, v;

firstChar = value.charAt( 0 );

if ( new Array( 12 ).join( firstChar ) === value ) {
return false;
}

// Step 1 - using first Check Number:
for ( i = 0, j = 9, v = 0; i < 9; ++i, --j ) {
sum += +( value.charAt( i ) * j );
}

firstCN = sum % 11;
if ( firstCN >= 10 ) {
firstCN = 0;
dsc = 2;
}

sum = 0;
for ( i = 0, j = 1, v = 0; i < 9; ++i, ++j ) {
sum += +( value.charAt( i ) * j );
}

secondCN = sum % 11;
if ( secondCN >= 10 ) {
secondCN = 0;
} else {
secondCN = secondCN - dsc;
}

return ( String( firstCN ).concat( secondCN ) === value.substr( -2 ) );

}, "Please specify a valid CNH number" );
3 changes: 2 additions & 1 deletion src/localization/messages_pt_BR.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,6 @@ $.extend( $.validator.messages, {
zipcodeUS: "Por favor, forne&ccedil;a um c&oacute;digo postal americano v&aacute;lido.",
ziprange: "O c&oacute;digo postal deve estar entre 902xx-xxxx e 905xx-xxxx",
cpfBR: "Por favor, forne&ccedil;a um CPF v&aacute;lido.",
nisBR: "Por favor, forne&ccedil;a um NIS/PIS v&aacute;lido"
nisBR: "Por favor, forne&ccedil;a um NIS/PIS v&aacute;lido",
cnhBR: "Por favor, forne&ccedil;a um CNH v&aacute;lido."
} );
6 changes: 6 additions & 0 deletions test/additional/cnhBR.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
QUnit.test( "cnhBR", function( assert ) {
var method = methodTest( "cnhBR" );
assert.ok( method( "00000000119" ), "Valid driver's license number" );
assert.ok( !method( "11111111111" ), "Invalid driver's license number" );
assert.ok( !method( "asdf" ), "Invalid driver's license number" );
} );
7 changes: 7 additions & 0 deletions test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<script src="rules.js"></script>
<script src="messages.js"></script>
<script src="methods.js"></script>
<script src="additional/cnhBR.js"></script>
<script src="additional/creditcard.js"></script>
<script src="additional/netmask.js"></script>
<script src="additional/abaRoutingNumber.js"></script>
Expand Down Expand Up @@ -447,6 +448,12 @@ <h3></h3>
<input name="year"/>
<button name="submitForm27" value="someValue" type="submit"><span>Submit</span></button>
</form>

<form id="cnhFormTest">
<input id="cnhnumber" name="cnhnumber" required>
<button name="submitFormCnh" value="submitFormCnh" type="submit"><span>Submit</span></button>
</form>

<form id="_contenteditableForm">
<div name="first_name" id="first_name" contenteditable placeholder="First Name"></div>
<br>
Expand Down

0 comments on commit fcf782e

Please sign in to comment.