Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Помощь по програме в Delphi  [new]
Doffik
Member

Откуда:
Сообщений: 1
Нужно создать програму, которая при вводе в строку 13 чисел (Штрих-кода) будет показывать изготовителя, то есть страну и показывает совпадает ли контрольная сумма. Все страны и их коды есть в текстовом документе. Как сделать так чтоб програма считывала код который я ввожу и показывала страну и совпадает ли контрольная сумма?
14 апр 18, 13:14    [21339018]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12012
Здесь форум программистов, а не фрилансеров.
14 апр 18, 13:22    [21339053]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 5966
Doffik
Нужно создать програму, которая при вводе в строку 13 чисел (Штрих-кода) будет показывать изготовителя, то есть страну и показывает совпадает ли контрольная сумма. Все страны и их коды есть в текстовом документе. Как сделать так чтоб програма считывала код который я ввожу и показывала страну и совпадает ли контрольная сумма?


Запрограммировать считывание кода, поиск страны в справочнике, расчет контрольной суммы и ее сравнение с эталоном.
16 апр 18, 09:31    [21341533]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1365
Проверка контрольного разряда:

function CheckEAN13(EAN13: string; ShowMessage : boolean = False): boolean;
var
  s: string;
  i, uControl1, uControl2, uControl: integer;
begin
  Result := False;
  if Length(EAN13) <> 13 then begin
    if ShowMessage then Application.MessageBox('Штрих-код EAN13 должен состоять из 13 цифр.', 'Проверка штрих-кода', MB_OK + MB_ICONWARNING);
    Exit;
  end;{if}
  {отрезаем контрольный разряд}
  s := copy(EAN13, 1, 12);
  {подсчет контрольного разряда заново}
  uControl1 := 0; uControl2 := 0;

  for i:=1 to length(s) div 2
    do Inc(uControl1, StrToInt(copy(s, 1+i*2-2, 1)));
  for i:=1 to length(s) div 2
    do Inc(uControl2, StrToInt(copy(s, 1+i*2-1, 1)));
  uControl := (uControl1 + uControl2*3) mod 10;
  if uControl > 0
    then uControl := 10 - uControl;
  s := s + IntToStr(uControl);
  {}
  if (s = EAN13)
    then Result := True
    else if ShowMessage then Application.MessageBox('Штрих-код неверный. Не совпадает контрольный разряд.', 'Проверка штрих-кода', MB_OK + MB_ICONWARNING);
end;
16 апр 18, 09:53    [21341578]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
krapotkin
Member

Откуда: Екатеринбург
Сообщений: 613
+пять копеек
мне больше импонирует идея делить простыни кода на законченные структурные элементы
вычисление кода и выдача сообщений имхо должны быть в разных процедурах
16 апр 18, 10:11    [21341634]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10410
Привел в божеский вид
+
procedure CheckEAN13(const EAN13: string);
const
  CCodeLen = 13;
var
  i, uControl1, uControl2, uControl: Integer;
begin
  if Length(EAN13) <> CCodeLen then
    raise Exception.Create('Штрих-код EAN13 должен состоять из 13 цифр.');

  {подсчет контрольного разряда заново}
  uControl1 := 0;
  uControl2 := 0;

  for i:=1 to (CCodeLen - 1) div 2 do begin
    Inc(uControl1, StrToInt(EAN13[i * 2 - 1]));
    Inc(uControl2, StrToInt(EAN13[i * 2]));
  end;
  uControl := (uControl1 + uControl2 * 3) mod 10;
  uControl := 10 - uControl;

  if IntToStr(EAN13[CCodeLen]) <> uControl then
    raise Exception.Create('Штрих-код неверный. Не совпадает контрольный разряд.');
end;

Exception лучше заменить на какой нибудь
EEAN13Error = class(Exception)
16 апр 18, 12:03    [21342041]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
Пылинка
Member

Откуда: СПб
Сообщений: 213
fraks,
Вот взялись вы его вытаскивать. А ведь вытащите - он вырастет и станет вашим или у кого то из нас, начальником. Потому что программистом работать не сможет просто физически.
16 апр 18, 12:06    [21342052]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1365
_Vasilisk_
Привел в божеский вид

С видом согласен.

Сам писал эту функцию давно, и тоже кажется по чьим-то мотивам.
Но работает по сей день.

А детская ошибка специально в коде вставлена? :)
16 апр 18, 12:23    [21342102]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1365
Пылинка
fraks,
Вот взялись вы его вытаскивать. А ведь вытащите - он вырастет и станет вашим или у кого то из нас, начальником. Потому что программистом работать не сможет просто физически.


Вы так говорите как будто программист - венец природы и все остальные - недостойные смерды.
Начальники так же нужны. Хватит ему характера стать начальником - ну и хорошо. Хорошим начальником - еще лучше.
Не каждому дано стать программистом, но и не каждому дано стать начальником.
16 апр 18, 12:34    [21342125]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10410
fraks
А детская ошибка специально в коде вставлена? :)
Нет. А что там? Потому, что писал прямо в браузере
16 апр 18, 15:59    [21342826]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по програме в Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10410
fraks
детская ошибка
_Vasilisk_
 IntToStr(EAN13[CCodeLen])
Это? Ну промахнулся немного :)
16 апр 18, 16:01    [21342832]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить