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? #=> trueQuerying 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) #=> falseThere 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) #=> falseThere 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 #=> 100030000823.times do
puts me.elder_relative.next
end
#=> 10035998982
#=> 10005999902
#=> 10008999848me.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 #=> trueThe executable terminates with a proper exit status:
$ turkish_id 10000000078 #=> true
$ echo $? #=> 0
$ turkish_id 10000000079 #=> false
$ echo $? #=> 1Run 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 1996Anatomy of the Turkish ID Number
The Turkish Identification Number consists of 11 digits.
There are three conditions for a valid identification number:
d1 > 0d10 == ((d1 + d3 + d5 + d7 + d9) * 7 - (d2 + d4 + d6 + d8)) mod 10d11 == (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.4.1(stable) - ✅
3.3.6(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-2025 Kerem Bozdas
This gem is available under the terms of the MIT License.