Кой е мъж, кой – жена? Според ЕГН-то.

Веднъж по време на курс ми зададоха следния въпрос: „Как в един стринг да извлечем предпоследния символ, който е цифра от 0 до 9 и ако стойността е 0, 2, 4, 6 или 8, да определяме една категория, а ако е 1, 3, 5, 7 или 9 да е друга.” Като добавка ме попитаха дали да не се направи някаква сложна IF структура. Аз зададох контра въпрос каква е крайната цел. Крайната цел се оказа, че въпросният стринг е ЕГН. И че предпоследната цифра на всяко ЕГН показва дали човекът е от мъжки или женски пол. По-конкретно, ако стойността е 0, 2, 4, 6 или 8, става въпрос за мъжки пол, а ако е 1, 3, 5, 7 или 9, става въпрос за женски пол.

Тогава вече решението изглежда сравнително просто. Никакви сложни IF структури не са необходими.

Като начало е необходимо да се извлече въпросният предпоследен символ. ЕГН задължително се състои от 10 символа, така че предпоследен е 9-ият символ. Почти във всяка система за управление на бази данни, програмен език или приложение за анализ на данни съществува функция за извличане на символ от стринг. Примерно функцията Mid (“стринг”; ”начален символ #”; “брой извлечени символи”), в която параметрите са следните:

  • Стринг – символният стринг, от който ще извличаме символа.
  • Начален символ # – местоположението на символа в стринга, откъдето ще започнем извличането.
  • Брой извлечени символи – колко символа са ни необходими да се извлекат от стринга.

Така, ако се работи с ЕГН „ГГММДД6734”, функцията ще има следния вид: MID(„ГГММДД6734”; 9; 1).

Резултатът в този случай ще е 3. Или ако се върнем на данните по-горе, става дума за човек от женски пол.

Сега идва въпросът: „Ако имаме един голям списък с ЕГН данни и трябва да ги определим всичките кои са жени и кои – мъже, как да попълним съответни данни в съседна колона?”.

Това означава, че за всеки ред от списъка трябва да направим някаква формула, която да определи предпоследния символ и ако той е 0, 2, 4, 6 или 8, става въпрос за мъжки пол, а ако е 1, 3, 5, 7 или 9, става въпрос за женски пол.

Обещах да няма сложни IF структури, с които да определяме коя точно цифра сме получили, но все пак без IF няма да се мине.

Ако цифрите 0, 2, 4, 6 или 8 ги разделите по модул 2, то резултатът от това деление ще е 0. Съответно за цифрите 1, 3, 5, 7 или 9 делението по модул 2 ще  даде резултат 1.

Т.е. ако използваме горния пример с ЕГН, то формулата би придобила следния вид: MID(„ГГММДД6734”; 9; 1) MOD 2. Тук вече трябва да се съобразите с продукта, който ползвате, за да видите дали операторът за деление по модул е MOD, %,  \,  MODULO или някакъв друг. За дадения пример резултатът ще е 1.

Ако се налага да се преравя списък с много ЕГН-та и за всеки елемент на списъка да се определя кой е мъж, кой – жена, остава да се добави една IF структура.

IF(MID(„ГГММДД6734”; 9; 1) MOD 2 = 1; “Жена”; „Мъж”)

Ето как същият пример би изглеждал в Microsoft Excel:

=IF(MOD(MID(„ГГММДД6734”;;9;1);2)=1;“Жена“;“Мъж“)

Ако в клетка A1 стойността е ГГММДД6734, а в B21 искаме да получим жена или мъж, то формулата ще се преобрази така:

=IF(MOD(MID(A1;9;1);2)=1;“Жена“;“Мъж“)

____________________________________________
Стефан Георгиев
е тренинг мениджър и инструктор в учебен център Ню Хърайзънс.
Сертифициран е като: IBM Certified Instructor, IBM Certified Application Developer, IBM Certified Administrator, IBM Certified Specialist xSeries, IBM PSS, MCTS: SQL Server 2008, Microsoft Office Specialist: Microsoft Access

Виж профила на Стефан Георгиев
Виж публикации от Стефан Георгиев

Интересувате се от темата? Пишете ни!

    Бързо запитване

    Вашите имена *

    Вашият Email *

    Вашето съобщение *

    captcha

    5 Коментари

    Добавете коментар

    Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *