Bom dia amigos eu queria saber como fazer um codigo com digito no final, eu tenho um programa de terceiro feito no clipper summer e ele não da a manutenção do mesmo para atualização de dadaos e tem mais de 22000 registros.
O que eu queria fazer era um sistema de cadastro alternativo para cadastrar os novos registros e de produtos que não estão em base de dados.
CODLAB: 002 - ABBOTT
CODPROD: 002.276-7
Codigo com digito no final
Moderador: Moderadores
-
Antonio Matheus
- Usuário Nível 1

- Mensagens: 28
- Registrado em: 13 Jul 2010 23:18
- Localização: sao caetano dosul
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Codigo com digito no final
Olá!
Olhe aqui no forum.
Provavelmente use as funções modulo 10 -> mod10() ou modulo 11 -> mod11() para gerar o dígito.
Peguei aqui mesmo no forum:
http://pctoledo.com.br/forum/viewtopic. ... 15#p157213
Saudações,
Itamar M. Lins Jr.
Olhe aqui no forum.
Provavelmente use as funções modulo 10 -> mod10() ou modulo 11 -> mod11() para gerar o dígito.
Peguei aqui mesmo no forum:
Código: Selecionar todos
STATIC FUNCTION Modulo10( cNumero )
LOCAL cChar, nSoma := 0, nValor, nResto, cDigito
FOR EACH cChar IN cNumero DESCEND
nValor := Val( cChar ) * iif( mod( cChar:__EnumIndex, 2 ) == 0, 1, 2 )
nSoma += nValor - iif( nValor > 9, 9, 0 )
NEXT
nResto := MOD( nSoma, 10 )
cDigito := Str( iif( nResto == 0, 0, 10 - nResto ), 1 )
RETURN cDigito
STATIC FUNCTION Modulo11( cNumero )
LOCAL cChar, nSoma := 0, nResto, cDigito, nMultiplica := 2
cNumero := AllTrim( cNumero )
FOR EACH cChar IN cNumero DESCEND
nSoma += Val( cChar ) * nMultiplica
nMultiplica := iif( nMultiplica == 9, 2, nMultiplica + 1 )
NEXT
nResto := Mod( nSoma, 11 )
cDigito := Str( iif( nResto == 0, 1, iif( nResto == 1, 0, 11 - nResto ) ), 1 )
RETURN cDigito
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Codigo com digito no final
Amiguinhos,
Antonio Matheus pelo jeito você se acostumou com o sistema e pelo investimento e ele realmente te serve e por isto deseja cadastrar itens que o sistema provavelmente não cadastra mais.
Se o intuito é só gerar um digito porque ele funcione apenas como perfumaria visual as funções apresentadas até agora já servem mas se o digito for um ponto de verificação e critica em partes internas do seu sistema precisará fazer com que o mesmo realmente bata com tal verificação.
Não testei a função módulo10 e a módulo11 retornou um digito diferente baseado no código que você forneceu como exemplo pelo fato da função usar fixo o peso 2 e multiplicador 9.
Ela é idêntica a função que usamos para gerar o digito verificador das chaves de notas NF-e/NFC-e.
Fiz um teste com a passagem de vários pesos e multiplicadores para ver qual deles retornava 7 e assim ficou a conclusão;
Os resultados com "*" retornaram 7 como digito.
Função DVModulo11 com parâmetros:
Quase nada diferente da função do Itamar M Lins Jr
Você pode usar qualquer uma das dicas passadas mas se em outro ponto do seu sistema ele retornar mensagem de que o digito não bate é porque a função interna de seu sistema use outra forma de gerá-lo e portanto, usar a terceira opção pode aproximar ao seu resultado e minimizar os erros.
Antonio Matheus pelo jeito você se acostumou com o sistema e pelo investimento e ele realmente te serve e por isto deseja cadastrar itens que o sistema provavelmente não cadastra mais.
Se o intuito é só gerar um digito porque ele funcione apenas como perfumaria visual as funções apresentadas até agora já servem mas se o digito for um ponto de verificação e critica em partes internas do seu sistema precisará fazer com que o mesmo realmente bata com tal verificação.
Não testei a função módulo10 e a módulo11 retornou um digito diferente baseado no código que você forneceu como exemplo pelo fato da função usar fixo o peso 2 e multiplicador 9.
Ela é idêntica a função que usamos para gerar o digito verificador das chaves de notas NF-e/NFC-e.
Fiz um teste com a passagem de vários pesos e multiplicadores para ver qual deles retornava 7 e assim ficou a conclusão;
Código: Selecionar todos
? DVModulo11( "002276", 1, 9 ), 01
? DVModulo11( "002276", 2, 9 ), 02
? DVModulo11( "002276", 3, 9 ), 03
? DVModulo11( "002276", 4, 9 ), 04
? DVModulo11( "002276", 5, 9 ), 05
? DVModulo11( "002276", 6, 9 ), 06
? DVModulo11( "002276", 7, 9 ), 07 // *
? DVModulo11( "002276", 8, 9 ), 08
? DVModulo11( "002276", 9, 9 ), 09
? DVModulo11( "002276", 1, 8 ), 10
? DVModulo11( "002276", 2, 8 ), 11
? DVModulo11( "002276", 3, 8 ), 12
? DVModulo11( "002276", 4, 8 ), 13
? DVModulo11( "002276", 5, 8 ), 14
? DVModulo11( "002276", 6, 8 ), 15
? DVModulo11( "002276", 7, 8 ), 16
? DVModulo11( "002276", 8, 8 ), 17 // *
? DVModulo11( "002276", 9, 8 ), 18
? DVModulo11( "002276", 1, 7 ), 19
? DVModulo11( "002276", 2, 7 ), 20
? DVModulo11( "002276", 3, 7 ), 21
? DVModulo11( "002276", 4, 7 ), 22
? DVModulo11( "002276", 5, 7 ), 23
? DVModulo11( "002276", 6, 7 ), 24
? DVModulo11( "002276", 7, 7 ), 25
? DVModulo11( "002276", 8, 7 ), 26
? DVModulo11( "002276", 9, 7 ), 27
? DVModulo11( "002276", 1, 6 ), 28
? DVModulo11( "002276", 2, 6 ), 29
? DVModulo11( "002276", 3, 6 ), 30
? DVModulo11( "002276", 4, 6 ), 31
? DVModulo11( "002276", 5, 6 ), 32
? DVModulo11( "002276", 6, 6 ), 33
? DVModulo11( "002276", 7, 6 ), 34 // *
? DVModulo11( "002276", 8, 6 ), 35
? DVModulo11( "002276", 9, 6 ), 36
? DVModulo11( "002276", 1, 5 ), 37
? DVModulo11( "002276", 2, 5 ), 38
? DVModulo11( "002276", 3, 5 ), 39
? DVModulo11( "002276", 4, 5 ), 40
? DVModulo11( "002276", 5, 5 ), 41
? DVModulo11( "002276", 6, 5 ), 42
? DVModulo11( "002276", 7, 5 ), 43 // *
? DVModulo11( "002276", 8, 5 ), 44
? DVModulo11( "002276", 9, 5 ), 45
? DVModulo11( "002276", 1, 4 ), 46
? DVModulo11( "002276", 2, 4 ), 47
? DVModulo11( "002276", 3, 4 ), 48
? DVModulo11( "002276", 4, 4 ), 49
? DVModulo11( "002276", 5, 4 ), 50
? DVModulo11( "002276", 6, 4 ), 51
? DVModulo11( "002276", 7, 4 ), 52 // *
? DVModulo11( "002276", 8, 4 ), 53
? DVModulo11( "002276", 9, 4 ), 54
? DVModulo11( "002276", 1, 3 ), 55
? DVModulo11( "002276", 2, 3 ), 56
? DVModulo11( "002276", 3, 3 ), 57
? DVModulo11( "002276", 4, 3 ), 58
? DVModulo11( "002276", 5, 3 ), 59
? DVModulo11( "002276", 6, 3 ), 60
? DVModulo11( "002276", 7, 3 ), 61 // *
? DVModulo11( "002276", 8, 3 ), 62
? DVModulo11( "002276", 9, 3 ), 63
Função DVModulo11 com parâmetros:
Código: Selecionar todos
STATIC FUNCTION DVModulo11(cStr,nPeso1,nPeso2)
local nTot := 0
local nMul := nPeso1
local i
for i := Len(cStr) to 1 step -1
nTot += Val(SubStr(cStr,i,1)) * nMul
nMul := if(nMul=nPeso2, nPeso1, nMul+1)
next
return if(nTot%11 < 2, "0", Str(11-(nTot%11),1))
Você pode usar qualquer uma das dicas passadas mas se em outro ponto do seu sistema ele retornar mensagem de que o digito não bate é porque a função interna de seu sistema use outra forma de gerá-lo e portanto, usar a terceira opção pode aproximar ao seu resultado e minimizar os erros.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Codigo com digito no final
Programa em Clipper Summer, provavelmente dá pra recuperar os fontes usando UNCLIP.Antonio Matheus escreveu:om dia amigos eu queria saber como fazer um codigo com digito no final, eu tenho um programa de terceiro feito no clipper summer e ele não da a manutenção do mesmo para atualização de dadaos e tem mais de 22000 registros.
O que eu queria fazer era um sistema de cadastro alternativo para cadastrar os novos registros e de produtos que não estão em base de dados.
CODLAB: 002 - ABBOTT
CODPROD: 002.276-7
Não vão ser exatamente iguais aos originais, podem precisar ajustes extras, mas podem ajudar.
Talvez até possa compilar com Harbour.
NÃO é certeza, vai ter que fazer seu próprio teste, SE PRECISAR DELES.
Pode até recuperar a rotina de cálculo de dígito que é usada por ele.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- mauricioportela
- Usuário Nível 2

- Mensagens: 95
- Registrado em: 29 Jul 2016 04:22
- Localização: Vitoria da Conquista/Bahia
Codigo com digito no final
O código do produto é somente 276 ?CODLAB: 002 - ABBOTT
CODPROD: 002.276-7
O "002" é do laboratório ?
Código: Selecionar todos
FUNCTION Main()
FOR x := 270 TO 280
? "Codigo: " + ALLTRIM(STR(x)) + "-" + ALLTRIM(STR(Digito(x)))
NEXT
RETURN Nil
FUNCTION Digito(nNumero)
RETURN INT(MOD(nNumero,9))+1
Mauricio Portela