Имя: Пароль:
1C
1С v8
Проверка вводимого штрихкода не проходит в случае если контрольная цифра 0
,
0 palpetrovich
 
31.01.14
12:50
Проверку делаю по схеме
1. Сложить все цифры, которые стоят на четных местах:
2. Полученную сумму умножить на 3:
3. Сложить все цифры, которые стоят на нечетных местах, без контрольной цифры:
4. Сложить числа, полученные в пунктах 2 и 3:
5. От полученной суммы отбросить десятки:
получим 2,
6. Из 10 вычесть полученное в пункте 5 число:

Сформированный 1с штрихкод 2000007093010 проверку не проходит ...я где-о неправ?
1 palpetrovich
 
31.01.14
12:51
* в (0) "получим 2," - не читать :)
2 NS
 
31.01.14
12:54
(0) Какую проверку не проходит?
3 NS
 
31.01.14
12:57
http://www.labeltest.com/scodes.html
Проходит проверку. Штрих-код подлинный, контрольный знак верный.
4 palpetrovich
 
31.01.14
12:59
(3) да, онлайн проверку проходит, не прохдит в 1с - по алгоритму из (0) ...да и если "ручками" посчитать по этому алгоритму - тоже не проходит
5 Ненавижу 1С
 
гуру
31.01.14
13:02
(4) если ручками посчитать, то проходит вообще-то
6 palpetrovich
 
31.01.14
13:10
(5) хм, где у меня прокол?
2000007093010
СуммаЧетных = 4
СуммаЧетных = 18
4*3+18=30
отбросить десятки = 0
10 - 0 = 10
10!=0
7 Torquader
 
31.01.14
13:11
Наверное, цифры на нечётных чётных местах, исключая саму контрольную цифру ?
8 palpetrovich
 
31.01.14
13:14
+(6) может в п.6 надо срвнивать только последнюю цифру? ...редкость конечно,но могли-бы и упомнуть в алгоритме
9 Torquader
 
31.01.14
13:19
(8) Ну, если строго, то 10-0=10, но циФра 0 (единицу тоже отбросить).
10 palpetrovich
 
31.01.14
13:21
(9) наверное, просто в том алгоритме, который мне попался на просторах интернета это не описано :)

всем спасибо
11 Torquader
 
31.01.14
13:23
(10) В каком-то иностранном алгоритме упоминалось что-то типа "комплементарная до 0 цифра", что более подходит по смыслу.
12 Torquader
 
31.01.14
13:25
13 NS
 
31.01.14
13:26
(10) Ты подумал что последней ЦИФРОЙ должно быть 10?
Нет такой цифры :)
14 Torquader
 
31.01.14
13:26
Function TestBarCode(ByRef b)
    Dim l
    l=Len(b)
    If l<>13 Then ' длина у нас должна быть 13 символов
        TestBarCode="Неверная длина:" & CStr(l)
        Exit Function
    End If
    r=0
    For l=1 To 11 Step 2
        k=Asc(Mid(b,l,1))
        If(k>=48)AND(k<=57)Then
            k=k-48
        Else ' если не цифра, то априори неверно
            TestBarCode="Неверный символ:" & Chr(k)
            Exit Function
        End If
        r=r+k
        k=Asc(Mid(b,l+1,1))
        If(k>=48)AND(k<=57)Then
            k=k-48
        Else
            TestBarCode="Неверный символ:" & Chr(k)
            Exit Function
        End If
        r=r+(k*3)
    Next
    r=(10-(r Mod 10))Mod 10
    k=Asc(Mid(b,13,1))
    If(k>=48)AND(k<=57)Then
        k=k-48
    Else ' контрольная цифра - тоже цифра
        TestBarCode="Неверный символ:" & Chr(k)
        Exit Function
    End If
    If k=r Then TestBarCode=True Else TestBarCode="Неверная цифра:" & CStr(k) & " вместо " & CStr(r)
End Function

s="2000007093010"

MsgBox s & "=>" & CStr(TestBarCode(s)),0,"Проверка"