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.
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
Os resultados com "*" retornaram 7 como digito.
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.