Project

turkish_id

0.01
Low commit activity in last 3 years
A long-lived project that still receives updates
Validate Turkish Identification Numbers and More!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 0
 Project Readme

Turkish ID 🔖

Status Coverage Downloads Dependencies Maintainability Version Docs

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?.

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:

  1. d1 > 0
  2. d10 == ((d1 + d3 + d5 + d7 + d9) * 7 - (d2 + d4 + d6 + d8)) mod 10
  3. 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.2.2 (stable)
  • 3.1.4 (stable)
  • 3.0.6 (security maintenance)
  • 🪦 2.7.8 (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

  1. Fork the repository
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Donations ❤️

You can donate me at Liberapay. Thanks! ☕️

Is it any good?

Yes.

License

Copyright © 2015-2023 Kerem Bozdas

This gem is available under the terms of the MIT License.