CamposPredefinidos.vb

  1. ' CamposPredefinidos.vb — ProInf.net — feb-2012
  2. '
  3. ' Campos que generan valores al azar:
  4. ' - en base a cálculos
  5. ' - en base a datos estadísticos
  6. '
  7. ' CampoId
  8. ' CampoNombre
  9. ' CampoApellido
  10. ' CampoSexo (depende de CampoNombre)
  11. ' CampoNIF
  12. ' CampoDireccion
  13. ' CampoMunicipio
  14. ' CampoProvincia (depende de CampoMunicipio)
  15. ' CampoCP (depende de CampoProvincia)
  16. ' CampoTelefono
  17. ' CampoTelefonoFijo (depende de CampoProvincia)
  18. ' CampoCorreo (depende de CampoNombre y CampoApellido)
  19. ' CampoNacimiento
  20. ' CampoEdad (depende de CampoNacimiento)
  21. ' CampoMatricula
  22.  
  23. Public Class CampoId
  24. Inherits CampoPredefinido
  25. Implements IReiniciable
  26.  
  27. Private Shared _contador As Integer = 0
  28.  
  29. Public Overrides Function Tipo() As TipoCampo
  30. Return TipoCampo.Entero
  31. End Function
  32.  
  33. Public Overrides Function Aleatorio() As String
  34. _contador += 1
  35. Return _contador.ToString()
  36. End Function
  37.  
  38. Public Sub Reiniciar() Implements IReiniciable.Reiniciar
  39. _contador = 0
  40. End Sub
  41.  
  42. End Class
  43.  
  44. Public Class CampoNombre
  45. Inherits CampoPredefinido
  46.  
  47. Public Property Valor As ValorNombre
  48.  
  49. Public Overrides Function Aleatorio() As String
  50. Valor = Recursos.nombres.AleatorioPonderado()
  51. Return Valor.Texto
  52. End Function
  53.  
  54. End Class
  55.  
  56. Public Class CampoApellido
  57. Inherits CampoPredefinido
  58.  
  59. Public Property Valor As ValorApellido
  60.  
  61. Public Overrides Function Aleatorio() As String
  62. Valor = Recursos.apellidos.AleatorioPonderado()
  63. Return Valor.Texto
  64. End Function
  65.  
  66. End Class
  67.  
  68. Public Class CampoSexo
  69. Inherits CampoPredefinido
  70.  
  71. Public Property CampoNombre As CampoNombre
  72.  
  73. Public Overrides Function Aleatorio() As String
  74. Dim sexo As EnumSexo
  75. If CampoNombre Is Nothing Then
  76. sexo = Azar.Entre(0, 1)
  77. Else
  78. sexo = CampoNombre.Valor.Sexo
  79. End If
  80. Return sexo.ToString()(0)
  81. End Function
  82.  
  83. End Class
  84.  
  85. Public Class CampoNIF
  86. Inherits CampoPredefinido
  87.  
  88. Const LETRAS = "TRWAGMYFPDXBNJZSQVHLCKET"
  89.  
  90. Public Overrides Function Aleatorio() As String
  91. Dim numero = Azar.Digitos(8)
  92. Dim letra = CalcularLetra(numero)
  93. Return String.Format("{0}{1}", numero, letra)
  94. End Function
  95.  
  96. Public Shared Function CalcularLetra(ByVal numero As Integer)
  97. Return LETRAS(numero Mod 23)
  98. End Function
  99.  
  100. End Class
  101.  
  102. Public Class CampoDireccion
  103. Inherits CampoPredefinido
  104.  
  105. Private Shared _vias() = {"Avenida", "Calle", "Paseo", "Plaza"}
  106. Private Shared _formatos() = {"{0} {1} {2}, {3}º {4}ª", "{0} {1} {2}, {3}º", "{0} {1} {2}, {3}"}
  107.  
  108. Public Overrides Function Aleatorio() As String
  109. Dim formato = Azar.ElementoArray(_formatos)
  110. Dim via = Azar.ElementoArray(_vias)
  111. Dim frase = ObtenerFrase()
  112. Dim numero = Azar.Entre(1, 300) & If(Azar.Entre(1, 20) = 1, " bis", "")
  113. Dim piso = Azar.Entre(1, 6)
  114. Dim puerta = Azar.Entre(1, 6)
  115. Dim direccion = String.Format(formato, via, frase, numero, piso, puerta)
  116. Return direccion
  117. End Function
  118.  
  119. Private Shared Function ObtenerFrase() As String
  120. Dim palabra = Recursos.palabras.Aleatorio()
  121. Dim preposicion = Azar.ElementoArray({"", "de"})
  122. Dim articulo = Azar.ElementoArray({"", palabra.Articulo.ToLower()})
  123. Dim contraccion = ObtenerContraccion(preposicion, articulo)
  124. Dim adjetivo = CasarGenero(ObtenerAdjetivo(), palabra.Articulo.ToLower())
  125. Dim formato = Azar.ElementoArray({"{1}", "{0} {1}", "{0} {1} {2}", "{1} {2}"})
  126. Return String.Format(formato, contraccion, palabra.Texto, adjetivo)
  127. End Function
  128.  
  129. Private Shared Function ObtenerContraccion(ByVal preposicion As String, ByVal articulo As String) As String
  130. If preposicion = "" Then
  131. Return articulo
  132. ElseIf preposicion = "de" And articulo = "el" Then
  133. Return "del"
  134. Else
  135. Return String.Format("{0} {1}", preposicion, articulo)
  136. End If
  137. End Function
  138.  
  139. Private Shared Function ObtenerAdjetivo() As String
  140. Dim adjetivo = Recursos.adjetivos.Aleatorio().Texto
  141. Return Utilidades.Capitalizar(adjetivo)
  142. End Function
  143.  
  144. Private Shared Function CasarGenero(ByVal adjetivo As String, ByVal articulo As String)
  145. If articulo = "el" And adjetivo.EndsWith("a") Then
  146. Return CambiarUltimaLetra(adjetivo, "o")
  147. ElseIf articulo = "la" And adjetivo.EndsWith("o") Then
  148. Return CambiarUltimaLetra(adjetivo, "a")
  149. Else
  150. Return adjetivo
  151. End If
  152. End Function
  153.  
  154. Private Shared Function CambiarUltimaLetra(ByVal texto As String, ByVal letra As Char) As String
  155. Return texto.Substring(0, texto.Length - 1) & letra
  156. End Function
  157.  
  158. End Class
  159.  
  160. Public Class CampoMunicipio
  161. Inherits CampoPredefinido
  162.  
  163. Public Property Valor As ValorMunicipio
  164.  
  165. Public Overrides Function Aleatorio() As String
  166. Valor = Recursos.municipios.AleatorioPonderado()
  167. Return Valor.Texto
  168. End Function
  169.  
  170. End Class
  171.  
  172. Public Class CampoProvincia
  173. Inherits CampoPredefinido
  174.  
  175. Public Property Valor As ValorProvincia
  176. Public Property CampoMunicipio As CampoMunicipio
  177.  
  178. Public Overrides Function Aleatorio() As String
  179. If CampoMunicipio Is Nothing Then
  180. Valor = Recursos.provincias.AleatorioPonderado()
  181. Else
  182. Valor = Recursos.provincias(CampoMunicipio.Valor.NumeroProvincia)
  183. End If
  184. Return Valor.Texto
  185. End Function
  186.  
  187. End Class
  188.  
  189. Public Class CampoCodigoPostal
  190. Inherits CampoPredefinido
  191.  
  192. Public Property CampoProvincia As CampoProvincia
  193.  
  194. Public Overrides Function Aleatorio() As String
  195. Dim cp As String
  196. If CampoProvincia Is Nothing Then
  197. cp = Recursos.provincias.AleatorioPonderado().CodigoPostal
  198. Else
  199. cp = CampoProvincia.Valor.CodigoPostal
  200. End If
  201. cp &= Azar.Digitos(5 - cp.Length)
  202. Return cp
  203. End Function
  204.  
  205. End Class
  206.  
  207. Public Class CampoTelefono
  208. Inherits CampoPredefinido
  209.  
  210. Public Overrides Function Aleatorio() As String
  211. Dim prefijo As String = Azar.Entre(600, 699)
  212. Return TelefonoAzar(prefijo)
  213. End Function
  214.  
  215. Public Shared Function TelefonoAzar(Optional ByVal prefijo As String = "") As String
  216. If prefijo.Length < 3 Then
  217. prefijo = prefijo & Azar.Digitos(3 - prefijo.Length)
  218. End If
  219. Dim telefono = String.Format("{0}-{1}-{2}", prefijo, Azar.Digitos(3), Azar.Digitos(3))
  220. Return telefono
  221. End Function
  222.  
  223. End Class
  224.  
  225. Public Class CampoTelefonoFijo
  226. Inherits CampoTelefono
  227.  
  228. Public Property CampoProvincia As CampoProvincia
  229.  
  230. Public Overrides Function Aleatorio() As String
  231. Dim prefijo As String
  232. If CampoProvincia Is Nothing Then
  233. prefijo = Recursos.provincias.AleatorioPonderado().PrefijoTelefonico
  234. Else
  235. prefijo = CampoProvincia.Valor.PrefijoTelefonico
  236. End If
  237. Return TelefonoAzar(prefijo)
  238. End Function
  239.  
  240. End Class
  241.  
  242. Public Class CampoCorreo
  243. Inherits CampoPredefinido
  244.  
  245. Private Shared _servidores() = {"email", "mail", "correo"}
  246. Private Shared _dominios() = {"com", "net", "es"}
  247.  
  248. Public Property CampoNombre As CampoNombre
  249. Public Property CampoApellido As CampoApellido
  250.  
  251. Public Overrides Function Aleatorio() As String
  252. Dim correo = String.Format("{0}@{1}.{2}", ObtenerUsuario(),
  253. Azar.ElementoArray(_servidores),
  254. Azar.ElementoArray(_dominios))
  255. Return correo
  256. End Function
  257.  
  258. Private Function ObtenerUsuario() As String
  259. Dim formatos() = {"{0}{1}", "{0}{1}", "{0}.{1}", "{1}{2}", "{0}{1}{2}"}
  260. Dim formato As String = Azar.ElementoArray(formatos)
  261. Dim nombre As String = RecortarNombre(Normalizar(ObtenerNombre()))
  262. Dim apellido As String = Normalizar(ObtenerApellido())
  263. Return String.Format(formato, nombre, apellido, Azar.Entre(1, 100))
  264. End Function
  265.  
  266. Private Function ObtenerNombre() As String
  267. If CampoNombre Is Nothing Then
  268. Return Recursos.nombres.AleatorioPonderado().Texto
  269. Else
  270. Return CampoNombre.Valor.Texto
  271. End If
  272. End Function
  273.  
  274. Private Function ObtenerApellido() As String
  275. If CampoApellido Is Nothing Then
  276. Return Recursos.apellidos.AleatorioPonderado().Texto
  277. Else
  278. Return CampoApellido.Valor.Texto
  279. End If
  280. End Function
  281.  
  282. Private Function Normalizar(ByVal texto As String) As String
  283. texto = texto.ToLower()
  284. texto = Utilidades.QuitarAcentos(texto)
  285. texto = RecortarEspacio(texto)
  286. Return texto
  287. End Function
  288.  
  289. Private Function RecortarEspacio(ByVal texto As String) As String
  290. Dim posicionEspacio = texto.IndexOf(" ")
  291. If posicionEspacio > 0 Then
  292. If Azar.Entre(0, 1) Then
  293. texto = texto.Substring(0, posicionEspacio - 1)
  294. Else
  295. texto = texto.Replace(" ", "")
  296. End If
  297. End If
  298. Return texto
  299. End Function
  300.  
  301. Private Function RecortarNombre(ByVal texto As String) As String
  302. If texto.Length > 3 Then
  303. Select Case Azar.Entre(1, 3)
  304. Case 2 : texto = texto.Substring(0, 1)
  305. Case 3 : texto = texto.Substring(0, 3)
  306. End Select
  307. End If
  308. Return texto
  309. End Function
  310.  
  311. End Class
  312.  
  313. Public Class CampoNacimiento
  314. Inherits CampoPredefinido
  315.  
  316. Public Property Fecha() As Date
  317. Public Property MinimaEdad() As Integer = 18
  318. Public Property MaximaEdad() As Integer = 85
  319.  
  320. Public Overrides Function Tipo() As TipoCampo
  321. Return TipoCampo.Fecha
  322. End Function
  323.  
  324. Public Overrides Function Aleatorio() As String
  325. Dim añoActual = Date.Today.Year
  326. Dim año = Azar.Entre(añoActual - MaximaEdad, añoActual - MinimaEdad)
  327. Dim mes = Azar.Entre(1, 12)
  328. Dim diasMes = Date.DaysInMonth(año, mes)
  329. Dim dia = Azar.Entre(1, Math.Min(diasMes, 31))
  330. Fecha = New Date(año, mes, dia)
  331. Return Fecha.ToString("yyyy-MM-dd")
  332. End Function
  333.  
  334. End Class
  335.  
  336. Public Class CampoEdad
  337. Inherits CampoPredefinido
  338.  
  339. Public Property CampoNacimiento As CampoNacimiento
  340.  
  341. Public Overrides Function Tipo() As TipoCampo
  342. Return TipoCampo.Entero
  343. End Function
  344.  
  345. Public Overrides Function Aleatorio() As String
  346. If CampoNacimiento Is Nothing Then
  347. Return Azar.Entre(18, 85)
  348. Else
  349. Return Utilidades.CalcularEdad(CampoNacimiento.Fecha)
  350. End If
  351. End Function
  352.  
  353. End Class
  354.  
  355. Public Class CampoMatricula
  356. Inherits CampoPredefinido
  357.  
  358. Const LETRAS = "BCDFGHJKLMNPRSTVWXYZ"
  359.  
  360. Public Overrides Function Aleatorio() As String
  361. Return String.Format("{0} {1}",
  362. Azar.Digitos(4),
  363. Azar.Simbolos(3, LETRAS))
  364. End Function
  365.  
  366. End Class

Proinf.net