Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Вниз

Как вам такой код? По-моему ужасно.   Найти похожие ветки 

 
Карелин Артем   (2003-06-26 13:01) [0]

function CheckINN(INN: String): Boolean;
// Проверяет корректность ИНН
type
TINNCo = array[1..12] of Byte;
const
INN10: TINNCo = (2, 4, 10, 3, 5, 9, 4, 6, 8, 0, 0, 0);
INN12_1: TINNCo = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0, 0);
INN12_2: TINNCo = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0);
var
INNB: TINNCo;
i: Integer;
function GetINNCheckSum(INN: TINNCo; Co: TINNCo; CoLen: Byte): Integer;
var
i: Integer;
begin
Result := 0;
for i := 1 to CoLen do
Inc(Result, INN[i]*Co[i]);
Result := Result mod 11;
Result := Result mod 10;
end;
begin
INN := Trim(INN);
try
if not (Length(INN) in [10, 12]) then
Raise Exception.Create("INN length not correct");
for i := 1 to High(INNB) do
if i <= Length(INN) then
INNB[i] := StrToInt(INN[i])
else
INNB[i] := 0;
if Length(INN) = 10 then
begin
if StrToInt(INN[10]) <> GetINNCheckSum(INNB, INN10, 9) then
Raise Exception.Create("10 digit INN not correct")
end
else
begin
i := GetINNCheckSum(INNB, INN12_1, 10);
if StrToInt(INN[11]) <> i then
Raise Exception.Create("11 digit of 12 digits INN not correct")
else
begin
INNB[11] := i;
if StrToInt(INN[12]) <> GetINNCheckSum(INNB, INN12_2, 11) then
Raise Exception.Create("12 digit of 12 digits INN not
correct")
end;
end;
Result := True
except
Result := False
end;
end;
============================


 
Johnmen   (2003-06-26 13:18) [1]

Забавно...:)
Откуда это чудо ?


 
Карелин Артем   (2003-06-26 13:23) [2]

Johnmen © (26.06.03 13:18)
Говорят из самой налоговой.


 
Юрий Федоров   (2003-06-26 13:25) [3]

>>Говорят из самой налоговой.
Вот так и живем :-)))


 
Ihor Osov'yak   (2003-06-26 13:27) [4]

Как сказать.. Выбор имен - прекрасная иллюстрация на тему, как не нужно делать..
Форматирование - более менее, если не обращать внимание на то, что вложенная процедура не выделена форматированием..

Впечатление такое, что человек что-то читал о правильном оформлении кода, но не все, и не до конца, и не особо думая.
Или совсем не читал, а просто прошелся по своему коду каким-то утилем, делающим форматирование..

Плохо, если одним словом..





 
Sha   (2003-06-26 13:28) [5]

Автор так это видит. Как думал, так и писал. Спасибо ему за алгоритм.
Переписать - однозначно.


 
Карелин Артем   (2003-06-26 13:30) [6]

Кстати меня добивает название поля в одной таблице "INDEX".


 
Карелин Артем   (2003-06-26 13:30) [7]

Таблица тоже оттуда.


 
Danilka   (2003-06-26 14:40) [8]

Карелин Артем ©
Вот-такой пост здесь был пол-года назад, непомню чей. По-моему ты его видел, то-ли это был ответ на твою ветку, толи еще что. Я сохранил себе, на всяких случай - вдруг алгоритм проверки понадобится.

Проверка ИНН. Автор функции - А.Камбалов (ACampball@mail.ru)
Думаю, комментариев не надо

function CheckINN(const INN: string): Boolean;
const
factor1: array[0..8] of byte = (2, 4, 10, 3, 5, 9, 4, 6, 8);
factor2: array[0..9] of byte = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
factor3: array[0..10] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
var
i: byte;
sum: word;
sum2: word;
begin
Result := False;

try
if Length(INN) = 10 then begin
sum := 0;
for i:=0 to 8 do
sum := sum + StrToInt(INN[i+1])*factor1[i];
sum := sum mod 11;
sum := sum mod 10;
Result := StrToInt(INN[10]) = sum;
end
else if Length(INN) = 12 then begin
sum := 0;
for i:=0 to 9 do
sum := sum + StrToInt(INN[i+1])*factor2[i];
sum := sum mod 11;
sum := sum mod 10;
sum2 := 0;
for i:=0 to 10 do
sum2 := sum2 + StrToInt(INN[i+1])*factor3[i];
sum2 := sum2 mod 11;
sum2 := sum2 mod 10;
Result := (StrToInt(INN[11]) = sum) and
(StrToInt(INN[12]) = sum2);
end; //
except
Result := False;
end; // try
end;


... ничего не напоминает? :))


 
Danilka   (2003-06-26 14:43) [9]

хотя да, сильно отличаются, сходство почти что только в названии..


 
Карелин Артем   (2003-06-26 14:48) [10]

На Королевстве есть путевая функция для этого дела.


 
vuk   (2003-06-26 14:57) [11]

Не, ну разве это ужас? Вот FastReport - это да, действительно ужас. Однако ж ничего, народ пользуется...


 
Mike B.   (2003-06-26 15:21) [12]

Вот вам ужас :)
правда на С

#include <stdio.h>
#include <stdlib.h>

#define m(x)(x<0?-1:!!x)
#define g tj()-J
#define a(x)(x<0?-x:x)
#define h(x)((x)<=K?x:N-(x))
#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f]; tj(){
U S=m(v)+(m(w)<<K); B(!S)A J; V(v=W+S; v!=J&&!q[v]; v+=S); A v; } k(){ _=K; A

v?a(v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/
v?a(v)>2))||q[J];

} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } R VR(){ int PZ=0x7fff;
A(R)(rand()&PZ)/(R)PZ; } l(){ _=K+1; A(v*w&&a(v)-a(w))||g; } R UC(){ R i=0,d;
u((i+=d=VR())<1.0); A d; } c(){ _= -11; A a(v)-a(w)||g; } I(ur,n,x){ W=ur;
J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); A
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i<M; ++i){ B(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } b

B(j>=0&&!I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){

V(v=0; v<f; ++v){ B(h(v>>K)==0){ U S=h(v&N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; i<M; ++i){
i%8||H"\n%4o ",i); B((Y=P[i]=m(P[i]))&& TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++&N); u(i&N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k&&h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i<M; ++i){ L Z=q[i]; B(Z){ U

r=h(i>>K)+h(i&N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):

(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j<M;
++j)B(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
B(!(++X&M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i<JZ; ++i)B(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();

i=p>>(K<<1); j=p&(M-1); B(I(i,j,1)){ H"Rats!\n"); A; } O(i,j); Y= -Y;
B(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long
B(T>time(),j=time(&j);

R i=0; srand((U)j); V(M=0; M<=f; ++M)i+=UC(); M=i/100; B(M&3)++M; B(M&1)--M;
V(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }


 
Johnny Smith   (2003-06-26 15:24) [13]

2Mike B. © (26.06.03 15:21)
Сильно! :))))))))))


 
gek   (2003-06-26 15:27) [14]


> Mike B. © (26.06.03 15:21)


Это что, серьезно кто-то писал?


 
Mike B.   (2003-06-26 15:30) [15]

Значит так, мне сказали что это дело - лабораторная работа, которую один студент сдал своему "любимому" преподавателю. Утверждают что все работает. Я не проверял, мне и так достаточно :)


 
uw   (2003-06-26 15:37) [16]

#define a(x)(x<0?-x:x) неграмотно написано, но при попутном ветре сработает.


 
Johnny Smith   (2003-06-26 15:37) [17]

2Mike B. © (26.06.03 15:30)
Значит так, мне сказали что это дело - лабораторная работа, которую один студент сдал своему "любимому" преподавателю. Утверждают что все работает. Я не проверял, мне и так достаточно :)

Не. Не работает. И даже не компилится.
Синтаксические ошибки и undeclared identifier"ы.
Исправлять неохота.


 
Mike B.   (2003-06-26 15:43) [18]

> Johnny Smith © (26.06.03 15:37)
И слава богу. Не хватало чтобы это еще и работало


 
Andrey   (2003-06-26 16:21) [19]

unless ($login=~/^[\w _]{1,30}$|^[ а-яА-Я0-9_]{1,30}$/)

И это работает... правда на perl-е, но тем не менее :)


или такой кусочек :)

s/^\s+//;
while ($_ ne "") {
$field = "";
for (;;) {
if (s/^"(([^"\\]|\\.)*)"//) {
($snippet = $1) =~ s#\\(.)#$1#g;
}
elsif (/^"/) {
die "Unmatched double quote: $_\n";
}
elsif (s/^"(([^"\\]|\\.)*)"//) {
($snippet = $1) =~ s#\\(.)#$1#g;
}
elsif (/^"/) {
die "Unmatched single quote: $_\n";
}
elsif (s/^\\(.)//) {
$snippet = $1;
}
elsif (s/^([^\s\\""]+)//) {
$snippet = $1;
}
else {
s/^\s+//;
last;
}
$field .= $snippet;
}
push(@words, $field);
}
@words;



 
Sha   (2003-06-26 16:41) [20]

Я вот тут ИНН переписал. Отнеситесь доброжелательно :)

//Проверяет корректность ИНН
function IsValidINN(const s: string): boolean;

function IsSumOK(const s: string; last: integer): boolean;
const
coef: array[1..11] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
var
sumOK, sum, ofs, val: integer;
begin;
sumOK:=ord(s[last+1]) - ord("0");
sum:=0;
ofs:=High(coef)-last;
repeat;
val:=ord(s[last]) - ord("0");
if (val>=0) and (val<=9) then inc(sum, val * coef[last + ofs]) else last:=0;
dec(last);
until last<=0;
Result:=(last=0) and ((sum mod 11) mod 10 = sumOK);
end;

var
len: integer;
begin;
len:=Length(s);
if len=10
then Result:=IsSumOK(s,len-1)
else if len=12
then Result:=IsSumOK(s,len-2) and IsSumOK(s,len-1)
else Result:=false;
end;

procedure TForm1.Edit1Change(Sender: TObject);
const
cl: array[boolean] of TColor= (clRed, clBlack);
begin
Edit1.Font.Color:=cl[IsValidINN(Trim(Edit1.Text))];
end;


 
Fantasist.   (2003-06-26 17:27) [21]


> Вот вам ужас :)
> правда на С



Умельцы писали программы, для конвертации нормального исходного кода в подобное чудо. В принципе, ничего сложного.


 
Sha   (2003-06-26 17:44) [22]

Fantasist. (26.06.03 17:27)
У меня однажды заказчик при сдаче проги внезапно захотел получить исходники, разумеется, бесплатно.
Пришлось все имена переменных и процедур в программе сделать из трех букв, и на каждой строке операторы собрать до длины 80. Длинными остались только имена из TPCRT. Смотрелось это весело.


 
Странник   (2003-06-26 17:47) [23]

> Вот вам ужас :)
> правда на С

не помню уж, как называется, но такие утилитки используются для конвертации java-кода, для убирания осмысленности при взломе.


 
mrcat   (2003-06-26 17:55) [24]

Sha © (26.06.03 17:44)

видать программа маленькая была, коли 3-х буквенных комбинаций хватило? ;)


 
Игорь Шевченко   (2003-06-26 18:00) [25]

Sha © (26.06.03 16:41)

А все равно, непонятно. Уж переписывать, так с комментариями и с приличными именами переменных и функций


 
Sha   (2003-06-26 18:02) [26]

mrcat © (26.06.03 17:55)
1500 строк


 
Sha   (2003-06-26 18:11) [27]

Игорь Шевченко © (26.06.03 18:00)
Да нет, надо было наоборот, не дать исходники. Кстати все комментарии были убраны.
Заказ был изначально сделан на минимальную сумму с обещанием со стороны заказчика продолжить сотрудничество при благоприятном результате. В процессе сдачи у заказчика появляется желание продолжить работу силами своих программистов. При этом он заявляет, что неприменным условием оплаты заказа является сдача исходников, хотя этого в договоре не было. Чтобы получить хоть какие-то деньги, пришлось все это проделать.


 
Soft   (2003-06-26 18:20) [28]

А как вам такой
procedure TCharGenForm.WriteMarking;
var i:integer;
var Rect:TRect;
begin
//


 
Sha   (2003-06-26 18:31) [29]

Soft © (26.06.03 18:20)
Автор не девушка, случайно?


 
Игорь Шевченко   (2003-06-26 18:36) [30]

Sha © (26.06.03 18:11)

Да я про функцию с ИНН :))


 
Asteroid   (2003-06-26 18:38) [31]

> Soft © (26.06.03 18:20)
Изврат, однако...
К сожалению, не сохранился кусок "отличного" кода. Но в нем было порядка 32-х меток, в каждой одна строчкой символов на 200 - и в конце goto :)


 
Sha   (2003-06-26 18:54) [32]

>Игорь Шевченко
>А все равно, непонятно. Уж переписывать, так с комментариями и с приличными именами переменных и функций
>Да я про функцию с ИНН :))

Согласен, пара комментариев не помешала бы. Да выбором имен и не затруднял себя (особенно не нравится last:). Хотел только алгоритм прояснить и лишнее убрать. Ненавижу вызывать и обрабатывать исключения там, где можно без них. Тем более, что в оригинале при неверном 10 знаке возможно возникновение разных исключений.



 
Soft   (2003-06-26 18:55) [33]

>>Sha © (26.06.03 18:31)
>>Автор не девушка, случайно?

Код моей программы, которую нужно было написать за день, а потом равнять было влом... и так все работает без глюков.


 
Soft   (2003-06-26 19:02) [34]

А вообще все мои программы написаны в подобном стиле, иногда с именами переменных длинными, но понятными только мне с хитрыми функциями и все отлично работает:)
Мой код должен быть понятен только двоим: мне и компилятору!

Видели бы вы код нашего ведущего программиста:) Кстати я тоже ведущий программист:)


 
Sha   (2003-06-26 19:07) [35]

Soft © (26.06.03 18:55)
Давно заметил одну особенность женского вкуса: им почему-то нравятся последовательности одинаковых или очень похожих операторов. А твой длинный case должен приводить их в полный восторг :)


 
Soft   (2003-06-26 19:17) [36]

>>Sha © (26.06.03 19:07)
>>Давно заметил одну особенность женского вкуса: им почему-то нравятся последовательности одинаковых или очень похожих операторов. А твой длинный case должен приводить их в полный восторг :)

Так Делфи это не C++:( В C Switch удобнее


 
Andrey   (2003-06-26 19:49) [37]


> Мой код должен быть понятен только двоим: мне и компилятору!

Вот откуда берутся программы в стиле write only :)))



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.008 c
1-44635
Zigs
2003-07-01 19:11
2003.07.14
Как изменить межстрочное расстояние, например в TDBMemo?


14-44818
Слесарь Матерящийся
2003-06-26 10:35
2003.07.14
Windows - озвучка событий, mp3


14-44874
realswat
2003-06-27 14:32
2003.07.14
как уведичить используемые ресурсы?


7-44920
anpv
2003-05-02 18:34
2003.07.14
ISA


14-44900
Soft
2003-06-25 19:16
2003.07.14
Программисты и админы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский