Расчет контрольной суммы excel

 

dolphin_dw

Пользователь

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

Господа, очень прошу помощи в написании кода для расчета контрольной суммы в Excel.

Для примера:
Есть строка: 79 32 78 34 09 00 00 04 01 01 05 0C 0B 0B 00 06 01 00 03 01 08 03 01 01 00 81 81 03 E1 C5 7A 0D E8 03 E8 03 C8 08 81 01 90 30
контролька 90 30

Задача такая в дальнейшем — разложить байты строки на биты по каждой функции. Изменяя биты руками для каждой функции хочу сделать чтоб автоматом менялась строка и автоматом рассчитывалась контролька.

Прикрепленные файлы

  • 1.png (8.19 КБ)

 

bedvit

Пользователь

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

Виталий

Вы бы приложили пример, что должно быть до и после обработки. И то, что у вас не получается, в чем нужна помощь. Шансы на помощь возрастут.

«Бритва Оккама» или «Принцип Калашникова»?

 

dolphin_dw

Пользователь

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

к сожалению что на выходе должно получиться у меня только в голове . А помощь нужна в написании кода скрипта или как программу …  Не силен я уже в программировании. Когда то C++ в детстве изучал…уже не помню ничего  

 

Ігор Гончаренко

Пользователь

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

#5

18.11.2019 20:32:05

Цитата
dolphin_dw написал:
что на выходе должно получиться у меня только в голове

вот и расскажите, что у вас в голове (касательно данной задачи)
желательно рассказ оборудовать файлом примером
рассказ должен получиться такой:
вот в этих= ячейках исходные, вот тут должен быть результат, результата это … и дальше описание процесса, как исходные преобразуются в результаты  

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Юрий М

Модератор

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

Контакты см. в профиле

dolphin_dw, посмотрите на свой #3 — на чём хотели сделать акцент, процитировав всё подряд? Даже подпись захватили. Вернитесь и удалите то, что Вы ошибочно считаете цитатой.

 

bedvit

Пользователь

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

Виталий

#7

19.11.2019 00:51:09

БМВ, Михаил, признаюсь честно, не приходилось встречаться с

CRC

. Почитал матчасть. Спасибо за ссылки.

Цитата
dolphin_dw написал:
написании кода скрипта или как программу

для этого-то и нужны ваши примеры и алгоритм. Что получилось и где нужна помощь.

Изменено: bedvit19.11.2019 00:51:37

«Бритва Оккама» или «Принцип Калашникова»?

 

БМВ

Модератор

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

Excel 2013, 2016

bedvit,  Виталий, мат часть

тут

 на работе бегло взглянул и …..

По вопросам из тем форума, личку не читаю.

 

человечеством уже придумано множество вариантов контроля целостности данных
и в том числе вычисления

CRC

.
а что нужно автору, никто кроме его пока не знает…

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

dolphin_dw

Пользователь

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

Я вас понял. сегодня тогда накидаю таблицу для наглядности, как это должно выглядеть и сделаю описание как это должно работать.

 

sokol92

Пользователь

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

#11

19.11.2019 15:03:32

Есть толковое

описание

от одного из корифеев этого дела на русском языке.

Владимир

Имеется вот такое число (чисел много)

01C437030000000000000400080000EF898E521E007017040500000000

необходимо побайтно сложить и в итоге получить контрольную сумму обрезаную до последнего (младшего) байта
т.е.
01+C4+37+03+00+00+00+00+00+00+04+00+08+00+00+EF+89+8E+52+1E+00+70+17+04+05+00+00+00+00 = 0х411
значит контрольная сумма 0х11 (т.е. младший байт от неё)

Подскажите как это сделать без сложного программирования?


Не понял, почему
01+C4+37+03+00+00+00+00+00+00+04+00+08+00+00+EF+89+8E+52+1E+00+70+17+04+05+00+00+00+00 = 0х411 ?


если сложить эти числа в калькуляторе виндовс (в режиме Hex), то результат как раз 411 (это в шестнадцатеричном формате)

0х411 ну или в десятичном 1041.
Но интересует шестнадцатеричный формат



A+B = 15 (в шест. виде)

01+C4+37 = FC

ну и так далее
01+C4+37+03+00+00+00+00+00+00+04+00+08+00+00+EF+89+8E+52+1E+00+70+17+04+05+00+00+00+00 = 411 (в шестн. виде)

есть такой калькулятор который считает в шестн. виде calc

но я просто складывал обычным виндовсовским.


Вариант через вычисления во вспомогательных столбцах(см.вложение для Excel2003)
необходимо установить и загрузить надстройку «Пакет анализа» СервисНадстройкиПакет анализа
p.s. Больше похоже не на 16-тиричную, а на 256-тиричную систему


без доп. ячеек:

="0x"&ДЕС.В.ШЕСТН(СУММПРОИЗВ((ПОИСКПОЗ(ПСТР(ПСТР(A3;(СТРОКА(A$1:ИНДЕКС(A:A;ДЛСТР(A3)/2))-1)*2+1;2);{1;2};1);{"0":"1":"2":"3":"4":"5":"6":"7":"8":"9":"A":"B":"C":"D":"E":"F"};)-1)*{16;1}))


Можно так еще:
=»0x»&ДЕС.В.ШЕСТН(СУММПРОИЗВ(ШЕСТН.В.ДЕС(ПСТР(A3;(СТРОКА($1:$99)-1)*2+1;2))))

Webmoney: E350157549801 Z116603216205 R268084006579


Цитата: kimtan от 10.03.2011, 20:32
Можно так еще:
=»0x»&ДЕС.В.ШЕСТН(СУММПРОИЗВ(ШЕСТН.В.ДЕС(ПСТР(A3;(СТРОКА($1:$99)-1)*2+1;2))))

Игорь, сам хотел такую вот написать:
=»0x»&ДЕС.В.ШЕСТН(СУММПРОИЗВ(ШЕСТН.В.ДЕС(ПСТР(A3;(СТРОКА(A$1:ИНДЕКС(A:A;ДЛСТР(A3)/2))-1)*2+1;2))))
так она у меня в 2003 ошибку #ЗНАЧ! выдает (твоя кстати тоже), что то не работает ШЕСТН.В.ДЕС с массивами.
Вот и пришлось извращатся с ПОИСКПОЗ


ОЧЕРТЕНЕТЬ !

работает ! как работает — не понял, но действительно вычисляет верно.

Ноги у этой задачи растут из проблемы получение числа, примерно такого вида:

«ТИП СООБЩЕНИЯ»&»КОД УСТРОЙСТВА»&»НЕМАЛЕНЬКОЕ 16-тиричное ЧИСЛО»&»КОНТРОЛЬНАЯ СУММА»

а «КОНТРОЛЬНАЯ СУММА» это и есть сумма всех предыдущих байт.
В итоге полученное число (всё, вместе с контр.суммой) — код который посылается на физическое устройство.
А таких устройств достаточно много, около 10 000.

Спасибо большое, сам ни за что не дошел бы.


Цитата: MCH от 11.03.2011, 00:33
…она у меня в 2003 ошибку #ЗНАЧ! выдает (твоя кстати тоже), что то не работает ШЕСТН.В.ДЕС с массивами…

Ну что тут скажешь?! Значит еще один маленький плюсик 2010-ому  ;)

Webmoney: E350157549801 Z116603216205 R268084006579


Excel 2003 EN, 2013 EN

Serge_007 Дата: Четверг, 27.10.2011, 19:41 | Сообщение № 2

Привет, Саня.
Думаю что таких спецов не много в принципе.

Для тех кто не знает что такое хэширование : http://ru.wikipedia.org/wiki

Привет, Саня.
Думаю что таких спецов не много в принципе.

Для тех кто не знает что такое хэширование : http://ru.wikipedia.org/wiki Serge_007

Сообщение Привет, Саня.
Думаю что таких спецов не много в принципе.

Для тех кто не знает что такое хэширование : http://ru.wikipedia.org/wiki Автор — Serge_007
Дата добавления — 27.10.2011 в 19:41

nerv Дата: Четверг, 27.10.2011, 21:46 | Сообщение № 3

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

Формуляр Дата: Четверг, 27.10.2011, 22:20 | Сообщение № 4

nerv, посмотрел предложенную ф-цию — похоже, её можно реализовать на формулах.
Только хотелось бы сократить те элементы, которые не очень принципиальны. Ежели, конечно, таковые имеются.
Можете ли вы вкратце прокоментировать каждую из используемых констант?
Для меня это всё — пляски с бубном.

Даже не понял, вшутку это или всерьёз. На всякий случай, отвечаю: ни малейшего понятия!

PS: Xor и And (я так понимаю — побитовые) в формулу не лезут. Можно как-нибудь без них или заменить чем?

nerv, посмотрел предложенную ф-цию — похоже, её можно реализовать на формулах.
Только хотелось бы сократить те элементы, которые не очень принципиальны. Ежели, конечно, таковые имеются.
Можете ли вы вкратце прокоментировать каждую из используемых констант?
Для меня это всё — пляски с бубном.

Даже не понял, вшутку это или всерьёз. На всякий случай, отвечаю: ни малейшего понятия!

PS: Xor и And (я так понимаю — побитовые) в формулу не лезут. Можно как-нибудь без них или заменить чем? Формуляр

Excel 2003 EN, 2013 EN

Сообщение nerv, посмотрел предложенную ф-цию — похоже, её можно реализовать на формулах.
Только хотелось бы сократить те элементы, которые не очень принципиальны. Ежели, конечно, таковые имеются.
Можете ли вы вкратце прокоментировать каждую из используемых констант?
Для меня это всё — пляски с бубном.

Даже не понял, вшутку это или всерьёз. На всякий случай, отвечаю: ни малейшего понятия!

PS: Xor и And (я так понимаю — побитовые) в формулу не лезут. Можно как-нибудь без них или заменить чем? Автор — Формуляр
Дата добавления — 27.10.2011 в 22:20

MCH Дата: Четверг, 27.10.2011, 22:48 | Сообщение № 5
MCH Дата: Четверг, 27.10.2011, 22:57 | Сообщение № 6
nerv Дата: Пятница, 28.10.2011, 13:29 | Сообщение № 7

Да и, у моей хеш-функции есть коллизии. Проверено : )

Да и, у моей хеш-функции есть коллизии. Проверено : ) nerv

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

Да и, у моей хеш-функции есть коллизии. Проверено : ) Автор — nerv
Дата добавления — 28.10.2011 в 13:29

Формуляр Дата: Пятница, 28.10.2011, 14:01 | Сообщение № 8

MCH, спасибо! Ваш вариант явно проще первоначального. Взял за рабочую основу.

nerv, спасибо за грамотный подход к проблеме. Буду разбираться, чем можно пожертвовать при реализации на формулах.

Не пойму в чём смысл преобразования

MCH, спасибо! Ваш вариант явно проще первоначального. Взял за рабочую основу.

nerv, спасибо за грамотный подход к проблеме. Буду разбираться, чем можно пожертвовать при реализации на формулах.

Не пойму в чём смысл преобразования

Excel 2003 EN, 2013 EN

Сообщение MCH, спасибо! Ваш вариант явно проще первоначального. Взял за рабочую основу.

nerv, спасибо за грамотный подход к проблеме. Буду разбираться, чем можно пожертвовать при реализации на формулах.

Не пойму в чём смысл преобразования

nerv Дата: Пятница, 28.10.2011, 15:52 | Сообщение № 9

Судя по всему остаточный артефакт от копи-паста

Попробуйте такой вариант. На первый взгляд результат вполне приемлемый. Я бы даже сказал лучше, чем был

Какая хорошая разница:
Алла | 2036555
аллА | 1090691
баа | 2089824
ааб | 980141

Судя по всему остаточный артефакт от копи-паста

Попробуйте такой вариант. На первый взгляд результат вполне приемлемый. Я бы даже сказал лучше, чем был

Какая хорошая разница:
Алла | 2036555
аллА | 1090691
баа | 2089824
ааб | 980141 nerv

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

Судя по всему остаточный артефакт от копи-паста

Попробуйте такой вариант. На первый взгляд результат вполне приемлемый. Я бы даже сказал лучше, чем был

Какая хорошая разница:
Алла | 2036555
аллА | 1090691
баа | 2089824
ааб | 980141 Автор — nerv
Дата добавления — 28.10.2011 в 15:52

MCH Дата: Пятница, 28.10.2011, 18:38 | Сообщение № 10
Формуляр Дата: Воскресенье, 30.10.2011, 19:40 | Сообщение № 11

Первоисточник выглядит вот так:
[vba]

Первоисточник выглядит вот так:
[vba]

Excel 2003 EN, 2013 EN

Первоисточник выглядит вот так:
[vba]

nerv Дата: Воскресенье, 30.10.2011, 21:17 | Сообщение № 12

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Для проверки эффективности хэш-функций были выбраны следующие тестовые данные:

Американский словарь из проекта Ispell, 62075 слов.
Русский словарь из проекта Ispell, 128900 слов.
Список имен, извлеченный из всех библиотек на моем linux-компьютере (libc.a и прочие), 136073 слов.

Общее количество после слияния — 326797 уникальных слов.

В предыдущем тесте данные имели общее свойство — неизменный старший бит каждого байта. Это могло повлиять на результат. Поэтому был проведен повторный тест, для которого были выбраны другие наборы данных:

Немецкий словарь из проекта Ispell, 39612 слов.
Венгерский словарь из проекта Ispell, 211880 слов.
Итальянский словарь из проекта Ispell, 37268 слов.
Шведский словарь из проекта Ispell, 24019 слов.

Общее количество после слияния — 310595 уникальных слов.

Мое мнение — не ищите логику там, где ее нет

CRC32 Function. Знакомое название, не правда ли?) Только если посмотреть код на той странице, ссылку на кот. я давал выше, саму таблицу вы не найдете) А она не маленькая : )

Не знаю, как работает C, но если писать в Ассемблере, то, действительно, будет установлен флаг OF, но при этом работа программы продолжится. Хотя, как запрограммируешь. *

*на сколько мне известно

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Для проверки эффективности хэш-функций были выбраны следующие тестовые данные:

Американский словарь из проекта Ispell, 62075 слов.
Русский словарь из проекта Ispell, 128900 слов.
Список имен, извлеченный из всех библиотек на моем linux-компьютере (libc.a и прочие), 136073 слов.

Общее количество после слияния — 326797 уникальных слов.

В предыдущем тесте данные имели общее свойство — неизменный старший бит каждого байта. Это могло повлиять на результат. Поэтому был проведен повторный тест, для которого были выбраны другие наборы данных:

Немецкий словарь из проекта Ispell, 39612 слов.
Венгерский словарь из проекта Ispell, 211880 слов.
Итальянский словарь из проекта Ispell, 37268 слов.
Шведский словарь из проекта Ispell, 24019 слов.

Общее количество после слияния — 310595 уникальных слов.

Мое мнение — не ищите логику там, где ее нет

CRC32 Function. Знакомое название, не правда ли?) Только если посмотреть код на той странице, ссылку на кот. я давал выше, саму таблицу вы не найдете) А она не маленькая : )

Не знаю, как работает C, но если писать в Ассемблере, то, действительно, будет установлен флаг OF, но при этом работа программы продолжится. Хотя, как запрограммируешь. *

*на сколько мне известно nerv

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Для проверки эффективности хэш-функций были выбраны следующие тестовые данные:

Американский словарь из проекта Ispell, 62075 слов.
Русский словарь из проекта Ispell, 128900 слов.
Список имен, извлеченный из всех библиотек на моем linux-компьютере (libc.a и прочие), 136073 слов.

Общее количество после слияния — 326797 уникальных слов.

В предыдущем тесте данные имели общее свойство — неизменный старший бит каждого байта. Это могло повлиять на результат. Поэтому был проведен повторный тест, для которого были выбраны другие наборы данных:

Немецкий словарь из проекта Ispell, 39612 слов.
Венгерский словарь из проекта Ispell, 211880 слов.
Итальянский словарь из проекта Ispell, 37268 слов.
Шведский словарь из проекта Ispell, 24019 слов.

Общее количество после слияния — 310595 уникальных слов.

Мое мнение — не ищите логику там, где ее нет

CRC32 Function. Знакомое название, не правда ли?) Только если посмотреть код на той странице, ссылку на кот. я давал выше, саму таблицу вы не найдете) А она не маленькая : )

Не знаю, как работает C, но если писать в Ассемблере, то, действительно, будет установлен флаг OF, но при этом работа программы продолжится. Хотя, как запрограммируешь. *

*на сколько мне известно Автор — nerv
Дата добавления — 30.10.2011 в 21:17

Источник

Adblock
detector

Некоторое время назад понадобилось сгенерировать много чисел в формате EAN-13. Загвоздка была в расчете последней контрольной цифры в коде.Небольшой поиск в Сети принес эту формулу. Чтобы в следующий раз не искать — пусть здесь полежит.

Формула выводит все 13 цифр включая последнюю контрольную.

=[cell]*10+MOD (10-MOD (3*(MID ([cell];2;1)+MID ([cell];4;1)+MID ([cell];6;1)+MID ([cell];8;1)+MID ([cell];10;1)+MID ([cell];12;1))+MID ([cell];1;1)+MID ([cell];3;1)+MID ([cell];5;1)+MID ([cell];7;1)+MID ([cell];9;1)+MID ([cell];11;1);10);10)

[cell] — ячейка в которой 12-значный штрих-код.
В русской версии Excel вместо функций MOD и MID поставить ОСТАТ и ПСТР сответственно:

=[cell]*10+ОСТАТ(10-ОСТАТ(3*(ПСТР([cell];2;1)+ПСТР([cell];4;1)+ПСТР([cell];6;1)+ПСТР([cell];8;1)+ПСТР([cell];10;1)+ПСТР([cell];12;1))+ПСТР([cell];1;1)+ПСТР([cell];3;1)+ПСТР([cell];5;1)+ПСТР([cell];7;1)+ПСТР([cell];9;1)+ПСТР([cell];11;1);10);10)

Для быстрого анализа данных протокола SPI (показания магнитометра погрузчика Jungenricht) из Salea logic, импортировал их в Excel. Для вычисления CRC понадобилось реализовать функцию вычисления (прототип взят из сети и доработан).
Сервис->Макрос->Редактор Visual Basic, встаем на проект Insert->Module.
Вставляем следующий код:

Public Function CRC8_8H2F(ByVal AppID As String) As Variant
Dim table() As Variant
table = Array(&H0, &H2F, &H5E, &H71, &HBC, &H93, &HE2, &HCD, &H57, &H78, &H9, &H26, &HEB, &HC4, &HB5, &H9A, _
&HAE, &H81, &HF0, &HDF, &H12, &H3D, &H4C, &H63, &HF9, &HD6, &HA7, &H88, &H45, &H6A, &H1B, &H34, _
&H73, &H5C, &H2D, &H2, &HCF, &HE0, &H91, &HBE, &H24, &HB, &H7A, &H55, &H98, &HB7, &HC6, &HE9, _
&HDD, &HF2, &H83, &HAC, &H61, &H4E, &H3F, &H10, &H8A, &HA5, &HD4, &HFB, &H36, &H19, &H68, &H47, _
&HE6, &HC9, &HB8, &H97, &H5A, &H75, &H4, &H2B, &HB1, &H9E, &HEF, &HC0, &HD, &H22, &H53, &H7C, _
&H48, &H67, &H16, &H39, &HF4, &HDB, &HAA, &H85, &H1F, &H30, &H41, &H6E, &HA3, &H8C, &HFD, &HD2, _
&H95, &HBA, &HCB, &HE4, &H29, &H6, &H77, &H58, &HC2, &HED, &H9C, &HB3, &H7E, &H51, &H20, &HF, _
&H3B, &H14, &H65, &H4A, &H87, &HA8, &HD9, &HF6, &H6C, &H43, &H32, &H1D, &HD0, &HFF, &H8E, &HA1, _
&HE3, &HCC, &HBD, &H92, &H5F, &H70, &H1, &H2E, &HB4, &H9B, &HEA, &HC5, &H8, &H27, &H56, &H79, _
&H4D, &H62, &H13, &H3C, &HF1, &HDE, &HAF, &H80, &H1A, &H35, &H44, &H6B, &HA6, &H89, &HF8, &HD7, _
&H90, &HBF, &HCE, &HE1, &H2C, &H3, &H72, &H5D, &HC7, &HE8, &H99, &HB6, &H7B, &H54, &H25, &HA, _
&H3E, &H11, &H60, &H4F, &H82, &HAD, &HDC, &HF3, &H69, &H46, &H37, &H18, &HD5, &HFA, &H8B, &HA4, _
&H5, &H2A, &H5B, &H74, &HB9, &H96, &HE7, &HC8, &H52, &H7D, &HC, &H23, &HEE, &HC1, &HB0, &H9F, _
&HAB, &H84, &HF5, &HDA, &H17, &H38, &H49, &H66, &HFC, &HD3, &HA2, &H8D, &H40, &H6F, &H1E, &H31, _
&H76, &H59, &H28, &H7, &HCA, &HE5, &H94, &HBB, &H21, &HE, &H7F, &H50, &H9D, &HB2, &HC3, &HEC, _
&HD8, &HF7, &H86, &HA9, &H64, &H4B, &H3A, &H15, &H8F, &HA0, &HD1, &HFE, &H33, &H1C, &H6D, &H42)
Dim crc As Byte Dim AppIDarray() As Byte Dim pos As Byte AppIDarray = HexToByte(AppID) aidLength = UBound(AppIDarray) crc = &HFF For j = 0 To aidLength pos = AppIDarray(j) Xor crc crc = table(pos) Next j crc = crc Xor &HFF CRC8_8H2F = Hex(crc) 'CRC8_8H2F = AppIDarray(1) End Function
Public Function HexToByte(strHex As String) As Byte()
Dim i As Integer
Dim tempByte As Byte
Dim outBytes() As Byte
ReDim outBytes(Len(strHex)  2 - 1)
For i = 0 To Len(strHex)  2 - 1
For j = 0 To 1
char = Mid(strHex, i * 2 + j + 1, 1)
Select Case char
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
tempByte = tempByte Or (Asc(char) - 48)
Case "A", "B", "C", "D", "E", "F":
tempByte = tempByte Or (Asc(char) - 55)
Case "a", "b", "c", "d", "e", "f":
tempByte = tempByte Or (Asc(char) - 87)
End Select
If j = 0 Then
tempByte = tempByte * 2 ^ 4
Else
outBytes(i) = tempByte
tempByte = 0
End If
Next
Next
HexToByte = outBytes
End Function

Вызов из любой ячейки следующим образом.
=CRC8_8H2F(«12345678abcdef»).

Понравилась статья? Поделить с друзьями:
  • Расчет кту таблица excel
  • Расчет конической передачи с круговым зубом в excel
  • Расчет кту пример excel
  • Расчет конверсии в excel
  • Расчет кту в формате excel бесплатно