This content originally appeared on DEV Community and was authored by Kerem Bozdas
This version of
turkish_id
adds support for querying the government registry for blue card holders. Read more on RubyDoc: #foreigner_registered?
Turkish ID
This gem provides methods to validate Turkish Identification Numbers.
Installation
Add this line to your application’s Gemfile:
gem 'turkish_id'
And then execute:
$ bundle
Or install it yourself as:
$ gem install turkish_id
Usage
Validating ID Numbers
Create a new instance:
identity_number = TurkishId.new(10000000146)
Use valid?
method to check validity:
identity_number.valid? #=> true
Querying the Government Registry
Create a new instance:
identity_number = TurkishId.new(10000000146)
Use registered?
method to query the government registry:
identity_number.registered?("Ahmet", "Yılmaz", 1987) #=> false
There is also a convenience method called not_in_registry?
which is the logical equivalent of !registered?
.
Use foreigner_registered?
method to query the foreigner registry:
identity_number.foreigner_registered?("Yukihiro", "Matsumoto", 14, 4, 1965) #=> false
There is also a convenience method called foreigner_not_in_registry?
which is the logical equivalent of !foreigner_registered?
.
Generating Relatives
You can generate ID numbers for your younger or elder relatives.
me = TurkishId.new(10000000146)
Calling younger_relative
or elder_relative
will return an Enumerable class.
me.elder_relative #=> #<Enumerator:0x00007f9e629032d0>
You can perform standard Enumerable operations on it.
me.elder_relative.first #=> 10003000082
3.times do
puts me.elder_relative.next
end
#=> 10035998982
#=> 10005999902
#=> 10008999848
me.elder_relative.take(5) #=> [10003000082, 10005999902, 10008999848, 10011999774, 10014999610]
And so on.
CLI (Command Line Interface)
You can use the CLI for quick lookups:
$ turkish_id 10000000078 #=> true
The executable terminates with a proper exit status:
$ turkish_id 10000000078 #=> true
$ echo $? #=> 0
$ turkish_id 10000000079 #=> false
$ echo $? #=> 1
Run turkish_id --help
to learn more:
Usage
turkish_id ID_NUMBER [GIVEN_NAME SURNAME YEAR_OF_BIRTH]
Description
turkish_id validates Turkish identity numbers.
Only providing ID_NUMBER performs numerical validation (offline).
Providing all arguments will query government registry (online).
Examples
turkish_id 10000000078
turkish_id 10000000146 Ahmet Yılmaz 1984
turkish_id 10005999902 "Ayşe Nur" Yılmaz 1996
Anatomy of the Turkish ID Number
The Turkish Identification Number consists of 11
digits.
There are three conditions for a valid identification number:
d1 > 0
d10 == ((d1 + d3 + d5 + d7 + d9) * 7 - (d2 + d4 + d6 + d8)) mod 10
d11 == (d1 + d2 + d3 + d4 + d5 + d6 + d8 + d9 + d10) mod 10
Where dn
refers to the n-th
digit of the identification number.
Remember that a valid identification number does not imply the existence of an ID. It could only be used as a preliminary check e.g. before querying a government website. This is very similar to credit card validation.
Support
Ruby Versions Tested Against
This gem is used in production and tested against the following Ruby versions:
3.3.5
(stable)3.2.6
(stable)3.1.6
(security maintenance)3.0.7
(end of life)
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Donations
You can donate me at Liberapay. Thanks!
Is it any good?
Yes.
Since you made it this far..
Don’t forget to my repository if you like it!
Bug reports and pull requests are welcome!
Happy Hacking,
Kerem
Photo Courtesy of Umit Okan
This content originally appeared on DEV Community and was authored by Kerem Bozdas