Помогите улучшить код получения CRC32 IEEE для ИУЛ (Информационно удостоверяющего листа) для экспертизы, из файла на С++ - Страница 3
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Помогите улучшить код получения CRC32 IEEE для ИУЛ (Информационно удостоверяющего листа) для экспертизы, из файла на С++

Помогите улучшить код получения CRC32 IEEE для ИУЛ (Информационно удостоверяющего листа) для экспертизы, из файла на С++

Ответ
Поиск в этой теме
Непрочитано 26.10.2023, 10:02
Помогите улучшить код получения CRC32 IEEE для ИУЛ (Информационно удостоверяющего листа) для экспертизы, из файла на С++
iliorik
 
Регистрация: 03.10.2009
Сообщений: 735

Написал программу для вычисления CRC32-IEEE. Может кому нужно будет для экспертизы.
В приложении файлы, которые нужно распаковать на диск С:, зайти в папку с файлами (C:\CRC32), и запустить файл "CRC32.reg".
Далее нажать "Да/Yes" и "Ок".
Есть ли предложения по улучшению или оптимизации кода?
Может есть возможность написания программы по формированию ИУЛ в формате doc или pdf для файла? Куда посмотреть, какие библиотеки и коды включить?

Код:
[Выделить все]
 
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <locale.h>
#include <windows.h>

using namespace std;

static const unsigned int crc32tab[256] = {
	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};

unsigned int crc32(unsigned char* buf, unsigned int size)
{
	unsigned int crc = 0xFFFFFFFF;
	for (unsigned int i = 0; i < size; i++)
	{
		crc = crc32tab[(crc ^ buf[i]) & 0xFF] ^ (crc >> 8);
	}
	return crc ^ 0xFFFFFFFF;
}

int main(int argc, char* args[])
{
	std::string dummy;
	//setlocale(LC_ALL, "Russian");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	std::string filename = "";
	for (int i = 1; i < argc; i++)
	{
		filename += args[i];
		filename += ' ';
	}
	if (argc < 2)
	{
		cout << args[0] << endl;
		cout << filename << endl;
		cout << "Error: no file path specified" << endl;
		std::getline(std::cin, dummy);
		return 0;
	}

	ifstream file(filename, ios::binary);
	if (!file.is_open())
	{
		cout << args[0] << endl;
		cout << filename << endl;
		cout << "Error: file not found" << endl;
		std::getline(std::cin, dummy);
		return 0;
	}

	file.seekg(0, ios::end);
	unsigned int size = file.tellg();
	file.seekg(0, ios::beg);

	unsigned char* buf = new unsigned char[size];
	file.read((char*)buf, size);
	file.close();

	unsigned int crc = crc32(buf, size);

	stringstream ss;
	ss << uppercase<< hex << crc /*the CRC32 number that you have computed somewhere*/;

	std::string resultString = ss.str();
	const char* output = resultString.c_str();
	const size_t len = strlen(output) + 1;
	HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
	memcpy(GlobalLock(hMem), output, len);
	GlobalUnlock(hMem);
	OpenClipboard(0);
	EmptyClipboard();
	SetClipboardData(CF_TEXT, hMem);
	CloseClipboard();

	//cout << args[0] << endl;
	cout << "File: " << endl;
	cout << filename << endl;
	cout << endl;
	cout  << "CRC32-IEEE: " << endl;
	cout << resultString << endl;
	cout << endl;

	

	std::cout << "Код скопирован в буфер обмена" << std::endl;
	std::getline(std::cin, dummy);

	return 0;
Код обновлён в сообщении ниже

Вложения
Тип файла: zip CRC32.zip (136.4 Кб, 246 просмотров)

__________________
Черточки и точки на плоскости - лишь посредник между идеей проекта и его физическим воплощением

Последний раз редактировалось iliorik, 20.06.2024 в 14:02.
Просмотров: 7726
 
Непрочитано 25.06.2024, 17:03
#41
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


вопрос - зачем все усложнять? Если проектные организации годами "клали болт" на внутреннюю организацию работ - значит, сейчас будут "пожинать" плоды своей лени и пофигизма, пытаясь сдать документацию по новым правилам. Кто придерживался хотя бы минимального порядка производства работ...
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.06.2024, 17:18
#42
iliorik


 
Регистрация: 03.10.2009
Сообщений: 735


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вопрос - зачем все усложнять?
Я стараюсь упростить. Клик правой мышки - результат.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Если проектные организации годами "клали болт" на внутреннюю организацию работ - значит, сейчас будут "пожинать" плоды своей лени и пофигизма, пытаясь сдать документацию по новым правилам. Кто придерживался хотя бы минимального порядка производства работ...
Ну то сильно "клали болт", обычно идут лесом. Либо доводят до нормального результата, который хотя бы соответствует как то требованию ГОСТ 21.101. Но при этом всё равно титулы у всех немного разные. И просто угадать по координатам где какой текст, не очень то и просто.
__________________
Черточки и точки на плоскости - лишь посредник между идеей проекта и его физическим воплощением
iliorik вне форума  
 
Непрочитано 26.06.2024, 03:01
#43
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,075


Цитата:
Сообщение от iliorik Посмотреть сообщение
угадать по координатам где какой текст
Надо не забыть, что в PDF может не быть текста. Могут быть буквы; по одно штучке; не по порядку. Могут быть линии - если шрифт был векторный. Надо проанализировать все линии на чертеже, и определить, не сложились ли они в буквы, а буквы - в слова. И вариант со сканированными чертежами не забыть, чтобы рукописные фамилии из штампа распознать, и чтоб без ошибок там.
Цитата:
Сообщение от iliorik Посмотреть сообщение
Я стараюсь упростить. Клик правой мышки
Слишком сложно. Алиса, сделай иул!
Нубий-IV вне форума  
 
Автор темы   Непрочитано 26.06.2024, 09:31
#44
iliorik


 
Регистрация: 03.10.2009
Сообщений: 735


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Надо не забыть, что в PDF может не быть текста. Могут быть буквы; по одно штучке; не по порядку. Могут быть линии - если шрифт был векторный. Надо проанализировать все линии на чертеже, и определить, не сложились ли они в буквы, а буквы - в слова. И вариант со сканированными чертежами не забыть, чтобы рукописные фамилии из штампа распознать, и чтоб без ошибок там.
поэтому только перевод в пиксели, и распознавание пикселей. Благо нейросети неплохо такое умеют, примеры есть, обучить тоже не проблема.
Хотя можно условие добавить, если в PDF нет текста, то "распознование пикселей". Всё таки быстрее будет работать

Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Слишком сложно. Алиса, сделай иул!
Не поддерживаю Алису. Слишком ограниченное корпоративными стандартами решение.
__________________
Черточки и точки на плоскости - лишь посредник между идеей проекта и его физическим воплощением

Последний раз редактировалось iliorik, 26.06.2024 в 09:37.
iliorik вне форума  
 
Непрочитано 26.06.2024, 09:33
#45
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


как понимаю, составление ИУЛ листа занимает основное время - которое тратится на проектирование. Все остальное делается в пару "щелчков". Правда, как максимально автоматизировать процесс генерации проектной документации, не имея централизованного задания параметров проекта и его компонентов - слабо себе представляю. Видимо, тоже ИИ)

А если параметры проекта задаются централизовано - то зачем заниматься расшифровкой титульных листов для генерации ИУЛ...
Сергей812 вне форума  
 
Автор темы   Непрочитано 26.06.2024, 10:08
#46
iliorik


 
Регистрация: 03.10.2009
Сообщений: 735


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
как понимаю, составление ИУЛ листа занимает основное время - которое тратится на проектирование. Все остальное делается в пару "щелчков". Правда, как максимально автоматизировать процесс генерации проектной документации, не имея централизованного задания параметров проекта и его компонентов - слабо себе представляю. Видимо, тоже ИИ)
Началось всё с того, что никто вообще не понимал из моих коллег, что это такое, и как этот номер получить.
Вначале догадались в архиве WinRAR посмотреть, но переписывать вручную - это время, и могут быть ошибки.
Потом я сделал подсчёт CRC, но опять же занимало время на выделение, копирование, вставку (следующий этап был, автоматическое копирование в буфер, и вставка из него Ctrl+V)
Сейчас есть несколько ИУЛ в rtf, в которых автоматически заполняются поля: CRC, дата, время (Остальные поля заполнены, файл автоматически выбирается по названию файла)
И если раньше загрузка в экспертизу занимала какое то время, то теперь это делается легко и моментально.
Такие мелочи упрощают жизнь проектировщику, и оставляют больше времени и умственных сил на само проектирование, а не на заполнение бланков.
__________________
Черточки и точки на плоскости - лишь посредник между идеей проекта и его физическим воплощением
iliorik вне форума  
 
Непрочитано 26.06.2024, 10:31
#47
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Offtop: 21.06.2024
Цитата:
Сообщение от iliorik Посмотреть сообщение
Скоро сделаю на основе ИУЛ в .rtf формате. Всё из одной программы будет создаваться, без стороннего ПО
26.06.2024
Цитата:
Сообщение от iliorik Посмотреть сообщение
Сейчас есть несколько ИУЛ в rtf, в которых автоматически заполняются поля: CRC, дата, время (Остальные поля заполнены, файл автоматически выбирается по названию файла)
а в середине от практической утилиты фантазии унесли куда-то в автоматическое распознавание титульных листов с использованием ИИ)
Сергей812 вне форума  
 
Автор темы   Непрочитано 26.06.2024, 10:39
#48
iliorik


 
Регистрация: 03.10.2009
Сообщений: 735


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
автоматическое распознавание титульных листов с использованием ИИ
Это просто идея, которая возникла в процессе разработки программы. Пока такого решения нет, делаем так, как получается, при этом быстро и эффективно.
Ну а когда я сделаю распознавание, она же мне не только для ИУЛ пригодится, а например для заполнения полей pdf файла всех проектов которые у меня есть (Название, Автор и т д.). Очень удобно будет искать и сортировать по заполненным полям файлы на диске.
__________________
Черточки и точки на плоскости - лишь посредник между идеей проекта и его физическим воплощением
iliorik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Помогите улучшить код получения CRC32 IEEE для ИУЛ (Информационно удостоверяющего листа) для экспертизы, из файла на С++