Извлечение даты рождения из ИНН (для Украины)


bliznezz аватар

bliznezz - Posted on 30 Октябрь 2008

суть метода - первые 5 цифр в ИНН у обычных граждан Украины означают дату рождения, в виде кол-ва дней от 1 янв 1900г.
это не секрет, в остальных цифрах защифрован пол, цифры придающие индивидуальность номеру и контрольные числа, а вот, например скрипт который выгребает эти данные из номера.

Пользователи Windows, а точнее MS Excell могут воспользоваться таким методом: открыть Excell, выбрать формат ячейки - дата. вписать туда (первые 5 цифр ИНН + 1), например ИНН 36525xxxxx - пишет 36526 ексель скажет что это 1 янв 2000г =)
в екселе приходится добавлять 1, потому что MS считает что 1900 год - високосный, хотя на самом деле это не так. (провере - проделайте что было выше и впишите цифру 60. а потом попробуйте найти эту дату на
в Linux можно воспользоваться date с его опцией --date,
вторая хитрость - это то что date линуксовый не работает с датами старше 1 янв 1902г. ( у меня по крайней мере)

вот написал скриптик, который делает это и с GNOME zenity GUI диалогами

#!/bin/bash
# inn2hb - INN to Happy Birthday
MAGIC=$(( 365+1+365 ))
# линуксовый date не работает с датами старше 01 янв 1902 =(
# поэтому извращаемся так.
# 1900 - високосный по MS Excell
# хоть и невисокосный по официальному календарю 365+1
# 1901 - невисокосный 365 дней
 
 
INN=$(zenity  --entry --text="Введите первые 5 цифр ИНН")
 
DATE=$( date --date  "1902-01-01 + $(( $INN - MAGIC )) days" +%F )
 
zenity  --calendar \
  --text="Дата рождения `date --date="$DATE" +"%d %B %Y"` " \
  --day=`date --date="$DATE" +%d` \
  --month=`date --date="$DATE" +%m`  \
  --year=`date --date="$DATE" +%Y`

PS допишите ему, чтобы выдирало только лишь первые 5 из введенных цифр, plz.

0
Ваша оценка: Ничего

все равно сложно :)=(ЛЕВСИМВ(фчейка_с_ИНН;5))+1, формат ячейки с формулой - дата

C одним из ИНН у меня скрипт с zenity не заработал, желания разбираться с zenity нет совсем, а вот консольный вариант заработал без вопросов.
Для нужд скриптов, к примеру при добавлении нового пользователя в домен - самое оно.

#!/bin/bash
# линуксовый date не работает с датами старше 01 янв 1902 =(
# поэтому извращаемся так.
# 1900 - високосный по MS Excel
# хоть и невисокосный по официальному календарю 365+1
# 1901 - невисокосный 365 дней
MAGIC=$(( 365+1+365 ))
echo "Введите ИНН"
read INPUT
#INN=`echo $INPUT | cut -c1-5`
INN=`echo $INPUT | grep -Eo '^.{5}'`
#DATE=$( date --date  "1902-01-01 + $(( $INN - $MAGIC )) days" +%F )
DATE=$( date --date  "1902-01-01 + $(( $INN - $MAGIC )) days" +%d-%m-%Y )
echo $DATE

Чтобы обрезать достаточно заменить

INN=$(zenity  --entry --text="Введите первые 5 цифр ИНН")

на

INN=$(zenity  --entry --text="Введите ИНН" | cut -c1-5)

или

INN=$(zenity  --entry --text="Введите ИНН" | grep -Eo '^.{5}')

Еще по последней цифре можно пол определить (чёт/нечёт)

А вот обратно никак не получится ИНН получить из даты, почему - включите мозг. Как можно получить весь номер, если в дата кроется только в первых пяти цифрах.

А как обратно получить в Excel: ИНН из даты рождения???

а для РФ?

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.