Перейти к содержимому

Фотография

Алгоритм СИКдля кого он нужен???


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 79

#61
Ognimor

Ognimor
  • Завсегдатай
  • 228 сообщений
Тимсон красавчик =)))
Все тема закрыта, алгоритм открыт !!! =)))
Всем спасибо.
  • 0

#62
dantl

dantl
  • Завсегдатай
  • 188 сообщений
Контрольный разряд по алгоритму и по DLL получается разный.
  • 0

#63
dantl

dantl
  • Завсегдатай
  • 188 сообщений
Сорри, все сходится
  • 0

#64
AlibekD

AlibekD
  • Завсегдатай
  • 229 сообщений
Ай молодец! Спасибо
  • 0

#65
Ultra-AM

Ultra-AM
  • В доску свой
  • 1 517 сообщений

' date='18.10.2006, 10:23' post='2760257']

Мой алгоритм правильный! Можешь сам проверить и сравнить результаты с теми, что выдает dll-ка.

Я не говорю что он неверный, но человек хотел его в Оракл встроить...
явно не на Дельфи код писать будет :spy:
Разработка, тестирование, перепроверка...
Уже давно бы базу всю перепроверил.
  • 0

#66
sobol

sobol
  • Постоялец
  • 388 сообщений
Тимсон - респект особый, ты - наш человек!!!

Information must me free!!!

А Ognimor досиделся с идеями - ни идей, ни исходника в заначке!!! :spy:
  • 0

#67
dantl

dantl
  • Завсегдатай
  • 188 сообщений
на C
#include <string.h>
#include <stdio.h>
typedef unsigned long UL;
typedef unsigned char UC;
UC T2[] =
{0x06,0x0C,0x08,0x04,0x0F,0x01,0x09,0x02,0x0A,0x0E,0x05,0x07,0x00,0x0B,0x03,0x0D,
0x05,0x0F,0x04,0x0D,0x00,0x07,0x0A,0x03,0x0E,0x0C,0x01,0x02,0x08,0x06,0x0B,0x09,
0x0A,0x08,0x01,0x0E,0x0B,0x02,0x03,0x00,0x0F,0x06,0x04,0x09,0x07,0x0C,0x05,0x0D,
0x07,0x0F,0x0A,0x0B,0x03,0x01,0x0D,0x08,0x04,0x05,0x0C,0x09,0x00,0x0E,0x02,0x06,
0x03,0x0C,0x07,0x0E,0x0D,0x01,0x05,0x0F,0x09,0x04,0x08,0x02,0x0B,0x00,0x06,0x0A,
0x09,0x0E,0x0B,0x02,0x0D,0x00,0x0C,0x0F,0x01,0x06,0x08,0x04,0x03,0x0A,0x07,0x05,
0x0C,0x03,0x06,0x09,0x05,0x08,0x0A,0x02,0x00,0x0D,0x0F,0x07,0x01,0x0E,0x0B,0x04,
0x0F,0x09,0x07,0x08,0x01,0x0E,0x04,0x06,0x0B,0x00,0x0C,0x02,0x0D,0x03,0x0A,0x05};
const char *CharValue = "0123456789ABCDEFGHJKMNPRSTUVWXYZ";
UC T1[32];
UC Data[128];
UC WorkByte[8];
UC M1[64];
UL ConvertValue1(UL Value){
  UC Bv[8];
  UL Tv;
  UC Tb;
  Tv = Value;
  for( int i=0; i<4; i++ ){
	  Bv[i*2] = UC(Tv & 0x0F);
	  Bv[i*2+1] = UC((Tv & 0xF0) >> 4);
	  Tv >>= 8;
  }
  for( int i = 0; i < 8; i++ ) {
	  Tb = Bv[i];
	  Bv[i] = T2[i * 16 + Tb];
  }
  Tv = 0;
  for( int i = 3; i >= 0; i-- )  {
	  Tv <<= 8;
	  Tv = Tv | Bv[i*2];
	  Tv = Tv | (Bv[i*2+1] << 4);
	}
  return Tv;
}
UL ConvertValue2(UL Value) {
  UL Tv;
  Tv = Value;
  for( int i = 0; i < 11; i++ ) {
	  if( (Tv & 0x80000000L) == 0 ) {
			Tv += Tv;
	  } else {
		  Tv += Tv;
		  Tv |= 1;
	  }
	}
  return Tv;
}
void MyTestData(const char* sData, char *Ric )
{
  strcpy( Ric, "000000000000000T" );
  memset( WorkByte, 0, sizeof(WorkByte));
  memset( T1, 0xF0, sizeof(T1) );
  memset( Data, 32, sizeof(Data) );
  int sLength = (int)strlen(sData);
  for( int i = 0; i < sLength; i++ ) {
	Data[i] = sData[i];
  }
  UC B = sLength / 32;
  if( (sLength % 32) != 0 ) B++;
  for( int j = 1; j <= B; j++ ) {
	  unsigned int Ost = 0;
	  for( int i = 31; i >= 0; i-- ) {
		  unsigned int Temp = T1[i] + Data[(j-1)*32+i] + Ost;
		  T1[i] = Temp & 0xFF;
		  Temp > 0xFF ? Ost = 1 : Ost = 0;
		}
	}
  int Kd8 = sLength / 8;
  if( (sLength % 8) != 0 ) Kd8++;
  for( int Main = 0; Main < Kd8; Main++ ) {
	  for( int i = 0; i <= 7; i++ ) 
		WorkByte[i] ^= Data[8 * Main + i];
	  for( int i = 0; i <= 7; i++ ) {
		  UL V1 = WorkByte[0] + (WorkByte[1] << 8) + (WorkByte[2] << 16) + (WorkByte[3] << 24);
		  UL V2 = T1[i*4] + (T1[i*4+1] << 8) + (T1[i*4+2] << 16) + (T1[i*4+3] << 24);
		  V1 = V1 + V2;
		  V1 = ConvertValue1(V1);
		  V1 = ConvertValue2(V1);
		  V2 = WorkByte[4] + (WorkByte[5] << 8) + (WorkByte[6] << 16) + (WorkByte[7] << 24);
		  V1 = V1 ^ V2;
		  for( int j = 0; j <=3; j++ ) WorkByte[4 + j] = WorkByte[j];
		  WorkByte[0] = UC(V1 & 0xFF);
		  WorkByte[1] = UC((V1 >> 8) & 0xFF);
		  WorkByte[2] = UC((V1 >> 16) & 0xFF);
		  WorkByte[3] = UC((V1 >> 24) & 0xFF);
		}
	  for( int i = 0; i <= 6; i++ ) {
		  UL V1 = WorkByte[0] + (WorkByte[1] << 8) + (WorkByte[2] << 16) + (WorkByte[3] << 24);
		  UL V2 = T1[i*4] + (T1[i*4+1] << 8) + (T1[i*4+2] << 16) + (T1[i*4+3] << 24);
		  V1 = V1 + V2;
		  V1 = ConvertValue1(V1);
		  V1 = ConvertValue2(V1);
		  V2 = WorkByte[4] + (WorkByte[5] << 8) + (WorkByte[6] << 16) + (WorkByte[7] << 24);
		  V1 ^= V2;
		  for( int j = 0; j <= 3; j++ ) WorkByte[j+4] = WorkByte[j];
		  WorkByte[0] = UC(V1 & 0xFF);
		  WorkByte[1] = UC((V1 >> 8) & 0xFF);
		  WorkByte[2] = UC((V1 >> 16) & 0xFF);
		  WorkByte[3] = UC((V1 >> 24) & 0xFF);
		}
	  UL V1 = WorkByte[0] + (WorkByte[1] << 8) + (WorkByte[2] << 16) + (WorkByte[3] << 24);
	  UL V2 = T1[28] + (T1[29] << 8) + (T1[30] << 16) + (T1[31] << 24);
	  V1 += V2;
	  V1 = ConvertValue1(V1);
	  V1 = ConvertValue2(V1);
	  V2 = WorkByte[4] + (WorkByte[5] << 8) + (WorkByte[6] << 16) + (WorkByte[7] << 24);
	  V1 ^= V2;
	  WorkByte[4] = UC(V1 & 0xFF);
	  WorkByte[5] = UC((V1 >> 8) & 0xFF);
	  WorkByte[6] = UC((V1 >> 16) & 0xFF);
	  WorkByte[7] = UC((V1 >> 24) & 0xFF);
	}
  memset(M1, 0, sizeof(M1));
  for( int i = 0; i <= 7; i++ ) {
	  UC B = WorkByte[i];
	  UC C = 0x80;
	  for(int j=0; j<=7; j++) {
		  if( (B & C) == 0 ) M1[i*8+j] = 0;
		  else M1[i*8+j] = 1;
		  C>>=1;
		}
	}
  for(int i=0; i<=11; i++) {
	  UC B = M1[i*5]+(M1[i*5+1]<<1)+(M1[i*5+2]<<2)+(M1[i*5+3]<<3)+(M1[i*5+4]<<4);
	  Ric[i] = CharValue[B];
  }
  B = (M1[60]<<1)+(M1[61]<<2)+(M1[62]<<3)+(M1[63]<<4);
  UC j1 = 0;
  for( int i = 0; i <= 63; i++ ) if( M1[i] == 1 ) j1++;
  j1 &= 1;
  B |= j1;
  Ric[12] = CharValue[B];
}
void MyTestRic(char *Ric){
  UL f = 0;
  for( int i = 0; i <= 14; i++ ){
	  f+=Ric[i] * (i + 1);
  }
  f%=31;
  Ric[15]=CharValue[f];
  Ric[16]=0;
}

  • 0

#68
BAD

BAD

    Заядлый П.П.

  • В доску свой
  • 5 727 сообщений
Тимсон, а так думаешь тебя пивом напоют? :-)
ЗЫ: Кста, надо бы собрацо.
  • 0

#69
Вини

Вини
  • В доску свой
  • 2 542 сообщений
Благодарю. Хорошая инфа!
  • 0

#70
asr

asr
  • Модератор
  • 24 325 сообщений

' date='18.10.2006, 10:23' post='2760257']

Мой алгоритм правильный! Можешь сам проверить и сравнить результаты с теми, что выдает dll-ка.

Я не говорю что он неверный, но человек хотел его в Оракл встроить...
явно не на Дельфи код писать будет :mad:
Разработка, тестирование, перепроверка...
Уже давно бы базу всю перепроверил.

В оракле обработка получается дольше к сожалению.
  • 0

#71
_R_A_I_M_

_R_A_I_M_
  • В доску свой
  • 1 328 сообщений

Понятия не имею кому нужен этот алгоритм.
Вообще этот СИК - туфта.
Имя Фамилия Отчество и дата рождения.
Достаточно родится тезке в тот же день и чего делать тогда?

на сегоднешний день сушествует 39 таких пар, для них генерировали сик отдельно, в конце 0 и 1
  • 0

#72
Вини

Вини
  • В доску свой
  • 2 542 сообщений
Кстати, кому интересно - реализация в 1С
  • 0

#73
vatokat

vatokat
  • В доску свой
  • 1 470 сообщений
Зачем надо было отдельный алгоритм разрабатывать? В Казахстане всегда идем своим путем? Почему нельзя было сделать MD5 от ФИОYYMMDD ?
  • 0

#74
yedyge

yedyge
  • Свой человек
  • 879 сообщений
всё равно была бы коллизия по тёзкам-ровесникам
  • 0

#75
vatokat

vatokat
  • В доску свой
  • 1 470 сообщений

всё равно была бы коллизия по тёзкам-ровесникам


Понятно, что была бы. Вопрос, зачем было городить свое решение, когда существовало куча проверенных алгоритмов генерирующих уникальный хэш.
  • 0

#76
Вини

Вини
  • В доску свой
  • 2 542 сообщений
vatokat, а как же откаты? Платные проекты, зарплаты племянников. Всё это надо учесть. По идее и РНН могли бы не разрабатывать и ИИН/БИН ...
  • 0

#77
debuger

debuger
  • Гость
  • 34 сообщений
есть вопрос к знающим людям: меняется ли алгоритм проверки СИКа если в ФИО присутствуют казахские буквы?
  • 0

#78
asr

asr
  • Модератор
  • 24 325 сообщений

есть вопрос к знающим людям: меняется ли алгоритм проверки СИКа если в ФИО присутствуют казахские буквы?

Нет. Подавай туда в стандарте каз.
  • 0

#79
Arian

Arian
  • Частый гость
  • 65 сообщений

на C

#include <string.h>
#include <stdio.h>

Спасибо за код! Очень пригодился :-)
  • 0

#80
kostya100

kostya100
  • Случайный прохожий
  • 3 сообщений
Кому интересно открылся сайт sik.idhost.kz - чистые алгоритмы СИКа без дллок. Есть на яве в виде хранимой процедуры для Оракл.
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.