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: 8028
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 2 vezes
- Curtiram: 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: 4666
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Curtiu: 1 vez
- 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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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