diff --git a/src/additional/nisBR.js b/src/additional/nisBR.js new file mode 100644 index 000000000..dabcc0cf2 --- /dev/null +++ b/src/additional/nisBR.js @@ -0,0 +1,59 @@ +/** + * Created for project jquery-validation. + * @Description Brazillian PIS or NIS number (Número de Identificação Social Pis ou Pasep) is the equivalent of a + * Brazilian tax registration number NIS of PIS numbers have 11 digits in total: 10 numbers followed by 1 check numbers + * that are being used for validation. + * @copyright (c) 25/10/2016 22:40, Cleiton da Silva Mendonça + * @author Cleiton da Silva Mendonça + * @link http://gitlab.com/csmendonca Gitlab of Cleiton da Silva Mendonça + * @link http://github.com/csmendonca Github of Cleiton da Silva Mendonça + */ + +$.validator.addMethod( "nisBR", function( value ) { + + var number; + var cn; + var sum = 0; + var dv; + var count; + var multiplier; + + // Removing special characters from value + value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" ); + + // Checking value to have 11 digits only + if ( value.length !== 11 ) { + return false; + } + + //Get check number of value + cn = parseInt( value.substring( 10, 11 ), 10 ); + + //Get number with 10 digits of the value + number = parseInt( value.substring( 0, 10 ), 10 ); + + for ( count = 2; count < 12; count++ ) { + multiplier = count; + if ( count === 10 ) { + multiplier = 2; + } + if ( count === 11 ) { + multiplier = 3; + } + sum += ( ( number % 10 ) * multiplier ); + number = parseInt( number / 10, 10 ); + } + dv = ( sum % 11 ); + + if ( dv > 1 ) { + dv = ( 11 - dv ); + } else { + dv = 0; + } + + if ( cn === dv ) { + return true; + } else { + return false; + } +}, "Please specify a valid NIS/PIS number" ); diff --git a/src/localization/messages_pt_BR.js b/src/localization/messages_pt_BR.js index 504c3042c..08c2c94bd 100644 --- a/src/localization/messages_pt_BR.js +++ b/src/localization/messages_pt_BR.js @@ -72,5 +72,6 @@ $.extend( $.validator.messages, { vinUS: "O número de identificação de veículo informado (VIN) é inválido.", zipcodeUS: "Por favor, forneça um código postal americano válido.", ziprange: "O código postal deve estar entre 902xx-xxxx e 905xx-xxxx", - cpfBR: "Por favor, forneça um CPF válido." + cpfBR: "Por favor, forneça um CPF válido.", + nisBR: "Por favor, forneça um NIS/PIS válido" } ); diff --git a/test/methods.js b/test/methods.js index db2d67169..ad2662c7e 100644 --- a/test/methods.js +++ b/test/methods.js @@ -1717,6 +1717,19 @@ QUnit.test( "cpfBR", function( assert ) { assert.ok( !method( "11144477737" ), "Invalid CPF Number: 2nd check number failed" ); } ); +QUnit.test( "nisBR", function( assert ) { + var method = methodTest( "nisBR" ); + assert.ok( method( "10757995753" ), "Valid NIS/PIS Number" ); + assert.ok( method( "107.57995.75-3" ), "Valid NIS/PIS Number" ); + assert.ok( method( "107.579.957-53" ), "Valid NIS/PIS Number" ); + assert.ok( method( "107-579-957-53" ), "Valid NIS/PIS Number" ); + assert.ok( method( "107.579.957.5-3" ), "Valid NIS/PIS Number" ); + assert.ok( !method( "99999999999" ), "Invalid NIS/PIS Number: dump data" ); + assert.ok( !method( "1075799575" ), "Invalid NIS/PIS Number: < 11 digits" ); + assert.ok( !method( "111444777355" ), "Invalid NIS/PIS Number: > 11 digits" ); + assert.ok( !method( "10757995752" ), "Invalid NIS/PIS Number: check number failed" ); +} ); + QUnit.test( "file accept - image wildcard", function( assert ) { var input = acceptFileDummyInput( "test.png", "image/png" ), $form = $( "
" ),