Skip to content

sequra/nifval

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NifVal

Description

NifVal provides an API to validate Spanish NIF/NIE/CIF/DNI numbers. As a shortcut, it provides an ActiveModel validator. You simply have to validate :nif for true for a specific field.

Installation

Simply add this gem to your Gemfile:

gem "nifval"

If ActiveModel has already been loaded when the nifval gem is loaded (as is the case in a Rails app) nifval will automatically load the ActiveModel validator. If you want to force loading of the ActiveModel validator, write this in your Gemfile:

gem "nifval", :require => 'nifval/activemodel'

and execute bundle.

Note: It appears that if we load NifVal after Devise, Nifval won't work. In order to make everything work, simply add Nifval before Devise in the Gemfile.

In a Rails project, run the generator in order to install the I18n template:

rails generate nifval:install

If you want to validate a Nif via Javascript, you can also add:

rails generate nifval:javascript

And you are done!

Usage

On your model

Let's see an example:

class Person < ActiveRecord::Base
  validates :nif, :nif => true
end

Then if we create an instance and see if it is valid, the validation will be checked.

Let's see one example for each case. A successful validation (correct control digit T for 00000000):

p = Person.new(nif: "00000000T")
p.valid? # => true

And an unsuccessful one (mistaken control digit C for A2345678):

p = Person.new(nif: "A2345678C")
p.valid? # => false

Stand-alone validation

While the ActiveModel validation only gives you true or false, the stand-alone validator has a complete API:

nif = Nifval::Nif.new("00000000T")   # => #<Nifval::Nif:0x007ff0510211a8 @nif="00000000T">
nif.dni?         # => true
nif.valid?       # => true
nif.valid_dni?   # => true
nif.valid_nie?   # => false
nif = Nifval::Nif.new("A2345678C")   # => #<Nifval::Nif:0x007ff05186ff30 @nif="A2345678C">
nif.cif?         # => false
nif = Nifval::Nif.new("A23456788")   # => #<Nifval::Nif:0x007ff051814e00 @nif="A23456788">
nif.cif?         # => true
nif.valid_cif?   # => false

### Via Javascript ###

Please refer to the Installation section on how to get Nifval's Javascript file.

You only have to add nifval.js to your application layout. Assuming the use of HAML:

= javascript_include_tag "nifval"

And then execute the nifval(nifToCheck) function, which returns a boolean.

nifval("00000000T") // returns true
nifval("A2345678C") // returns false

Example

You can see both situations via the test application included in this gem. This test app is also available at http://nifvalapp.heroku.com.

Changelog

  • v0.1.0 First version, basic Spanish NIF validation.
  • v0.1.1 Some fixes on regexps taht would allow invalid NIFs.
  • v0.1.2 Compatible with Ruby 1.8.7 and 1.9.2.
  • v0.1.3 Adding I18n support for error messages.
  • v0.1.4 Several fixes.
  • v0.2.0 Added test app, and providing a Javascript version too.
  • v0.2.1 Accepting strings with smaller than 9 chars.
  • v0.2.2 Core refactor, thanks to @ritxi.
  • v0.3.0 Calls to methods with ? like #dni? now return false or true.

Contributors

Thanks to @ritxi for the refactoring in v0.2.2.

Documentation

Adapted from here.

You can also find more information on Wikipedia.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 60.9%
  • JavaScript 25.8%
  • HTML 6.0%
  • Haml 4.8%
  • CSS 2.5%