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.
License
Copyright © 2015-2024 Kerem Bozdas
This gem is available under the terms of the MIT License.