DEV Community

Cover image for New Release: turkish_id v1.7.0
Kerem Bozdas
Kerem Bozdas

Posted on

New Release: turkish_id v1.7.0

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'
Enter fullscreen mode Exit fullscreen mode

And then execute:

$ bundle
Enter fullscreen mode Exit fullscreen mode

Or install it yourself as:

$ gem install turkish_id
Enter fullscreen mode Exit fullscreen mode

Usage

Validating ID Numbers

Create a new instance:

identity_number = TurkishId.new(10000000146)
Enter fullscreen mode Exit fullscreen mode

Use valid? method to check validity:

identity_number.valid?  #=> true
Enter fullscreen mode Exit fullscreen mode

Querying the Government Registry

Create a new instance:

identity_number = TurkishId.new(10000000146)
Enter fullscreen mode Exit fullscreen mode

Use registered? method to query the government registry:

identity_number.registered?("Ahmet", "Yılmaz", 1987)  #=> false
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Calling younger_relative or elder_relative will return an Enumerable class.

me.elder_relative  #=> #<Enumerator:0x00007f9e629032d0>
Enter fullscreen mode Exit fullscreen mode

You can perform standard Enumerable operations on it.

me.elder_relative.first  #=> 10003000082
Enter fullscreen mode Exit fullscreen mode
3.times do
 puts me.elder_relative.next
end

#=> 10035998982
#=> 10005999902
#=> 10008999848
Enter fullscreen mode Exit fullscreen mode
me.elder_relative.take(5)  #=> [10003000082, 10005999902, 10008999848, 10011999774, 10014999610]
Enter fullscreen mode Exit fullscreen mode

And so on.

CLI (Command Line Interface)

You can use the CLI for quick lookups:

$ turkish_id 10000000078  #=> true
Enter fullscreen mode Exit fullscreen mode

The executable terminates with a proper exit status:

$ turkish_id 10000000078  #=> true
$ echo $?                 #=> 0
$ turkish_id 10000000079  #=> false
$ echo $?                 #=> 1
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

  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.


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

Top comments (0)