EAN13.as

  1. /*
  2.   EAN13.as — Código de barras EAN-13
  3.   Convertido a ActionScript 3 — ProInf.net 2011
  4.  
  5.   IMPORTANTE:
  6.   Para evitar el error "Cannot create property" hay que ir al menú:
  7.   Publish settings > Flash > ActionScript 3 > Settings > Automatically declare stage instances: ON
  8. */
  9. package
  10. {
  11. import flash.display.*;
  12.  
  13. public class EAN13 extends MovieClip
  14. {
  15. public function EAN13 ()
  16. {
  17. reset();
  18. }
  19.  
  20. public function reset ():void
  21. {
  22. var i:Number;
  23. var obj:MovieClip;
  24.  
  25. for (i=1; i<=13; ++i) {
  26. obj = this["digit" + i];
  27. obj.stop ();
  28. }
  29. for (i=2; i<=13; ++i) {
  30. obj = this["barra" + i];
  31. obj.stop ();
  32. }
  33. }
  34.  
  35. public function ean13 (strNumero12cifras:String):void
  36. {
  37. var i:Number;
  38. var fotograma:Number;
  39. var obj:MovieClip;
  40.  
  41. var arrayDigitos:Array = new Array (13);
  42.  
  43. //Comprobar tamaño del parámetro
  44. if (strNumero12cifras.length < 12) {
  45. return;
  46. }
  47.  
  48. //Convertir el parámetro string en array de dígitos
  49. for (i=0; i<12; ++i)
  50. {
  51.  
  52. var car:String = strNumero12cifras.charAt (i);
  53. var digito:Number = "0123456789".indexOf (car);
  54. if (digito == -1) return;
  55. arrayDigitos[i] = digito;
  56. }
  57.  
  58. // Calcular dígito 13 (dígito de control)
  59. arrayDigitos[i] = calcularDigito13 (arrayDigitos);
  60.  
  61. // Visualizar el número inferior
  62. for (i=1; i<=13; ++i) {
  63. obj = this["digit" + i];
  64. fotograma = arrayDigitos[i-1] + 1;
  65. obj.gotoAndStop (fotograma);
  66. }
  67.  
  68. // Obtener los juegos de caracteres de los 6 dígitos de la izquierda
  69. var arrayJuegosAB = new Array ("AAAAAA", "AABABB", "AABBAB", "AABBBA", "ABAABB", "ABBAAB", "ABBBAA", "ABABAB", "ABABBA", "ABBABA");
  70. var strJuego = arrayJuegosAB[ arrayDigitos[0] ];
  71. for (i=2; i<=13; ++i) {
  72. obj = this["barra" + i];
  73. var juego:Number = 2;
  74. if (i <= 7) {
  75. juego = "AB".indexOf(strJuego.charAt(i-2));
  76. }
  77. fotograma = arrayDigitos[i-1] + juego * 10 + 1;
  78. obj.gotoAndStop (fotograma);
  79. }
  80. }
  81.  
  82. private function calcularDigito13 (arrayDigitos:Array):Number
  83. {
  84. var acum:Number = 0;
  85. var par:Boolean = false;
  86. for (var i=0; i<12; ++i) {
  87. if (par) {
  88. acum += arrayDigitos[i] * 3;
  89. }
  90. else {
  91. acum += arrayDigitos[i];
  92. }
  93. par = ! par;
  94. }
  95. return (10 - acum % 10) % 10;
  96. }
  97.  
  98. } // class EAN-13
  99.  
  100. } // package
  101.  
  102.  

Proinf.net